Fix f is a fix point of the
Functor f. Note
that in Haskell the least and greatest fixed points coincide, so we
don't need to distinguish between
Mu f and
Nu f.
This type used to be called
Y, hence the naming convention
for all the
yfoo functions.
This type lets us invoke category theory to get recursive types and
operations over them without the type checker complaining about
infinite types. The
Show instance doesn't print the
constructors, for legibility.