make (x : xs) = let ( low, high ) = partition ( < x ) xs in Node { key = x , left = make low , right = make high } nodes ( Node { } ) = nodes (left t) ++ [ key t ] ++ nodes (right t) sort (x : xs) = nodes (make (x : xs)) = let ( low, high ) = partition ( < x ) xs in nodes (make low) ++ [ x ] ++ nodes (make high) sort (x : xs) = let ( low, high ) = partition ( < x ) xs in sort low ++ [ x ] ++ sort high