New code
The trick is to take a regular functor f and create a new functor whose fmap is lazily evaluated.
Here's the usual Fix
case class Fix[F[_]](inner: F[Fix[F]])
object Fix {
def in[F[_]](lff: F[Fix[F]]): Fix[F] = new Fix[F](lff)
def out[F[_]]: Fix[F] => F[Fix[F]] = f => f.inner