Well, actually, you can't do that very well, unless the function you fold with be pretty much copy of `-tree-map` sens the recursion.

There's something called "catamorphism and type functor fusion" which basically states: 

    foldr g c . map f = foldr (\v a -> g (f v) a) c

but that doesn't apply here since we don't inject the values in an envelope type (something like `Fix f = In (f (Fix f))`)

See the other comment with `data Tree a ...` example. To get type functor fusion you'd need to do that.