main :: [sys_message] main = [Stdout (lay [show (f example) | f <- [preorder,inorder,postorder,levelorder]])] example :: tree num example = Node 1 (Node 2 (Node 4 (leaf 7) Nilt) (leaf 5)) (Node 3 (Node 6 (leaf 8) (leaf 9)) Nilt) tree * ::= Nilt | Node * (tree *) (tree *) leaf :: *->tree * leaf k = Node k Nilt Nilt preorder :: tree *->[*] preorder Nilt = [] preorder (Node v l r) = v : preorder l ++ preorder r inorder :: tree *->[*] inorder Nilt = [] inorder (Node v l r) = inorder l ++ v : inorder r postorder :: tree *->[*] postorder Nilt = [] postorder (Node v l r) = postorder l ++ postorder r ++ [v] levelorder :: tree *->[*] levelorder t = f [t] where f [] = [] f (Nilt:xs) = f xs f (Node v l r:xs) = v : f (xs++[l,r])