data Tree a
= Leaf
| Node { key :: a
, left :: Tree a, right :: Tree a
}
tmap :: ( a -> b ) -> ( Tree a -> Tree b )
tmap f t = case t of
Leaf -> Leaf
Node {} ->
Node { key = f (key t)
, left = tmap f (left t)
, right = tmap f (right t)
}