Made freeze into freezeWith, a more generic function which takes a natural transformation (forall a. f a -> g a), so you can transform to the fixed-point of a different functor while you still have enough information to make the transformation memory-efficient (i.e. tying in knots still happens).