evensplit [] == [] evensplit (a : b) == a : oddsplit b oddsplit [] == [] oddsplit (a : b) == evensplit b merge [] [] == [] merge [] x == x merge x [] == x merge (a : resta) (b : restb) == a : merge resta (b : restb) \ <| a < b |> \ b : merge (a : resta) restb sort [] == [] sort [ a ] == [ a ] sort x == merge (sort (evensplit x)) (sort (oddsplit x))