merge [] ys = ys merge xs [] = xs merge (x:xs) (y:ys) | x < y = x : merge xs (y:ys) | y < x = y : merge (x:xs) ys | otherwise = x : merge xs ys