If you're going to introduce a generic functor fixpoint then you'll probably want to define
type Tree a = Fix (TreeF a)
so that `toTreeF` is just `unfix` (and is effectively free, as I mentioned above)