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))