class Lazy l where
The Lazy class represents types which allow evaluation of values
to be deferred.
Usually, this means that a type contains a function arrow which can
be used to delay evaluation.
defer :: (Unit -> l) -> l
Lazy (a -> b)
fix :: forall l. Lazy l => (l -> l) -> l
fix defines a value as the fixed point of a function.
The Lazy instance allows us to generate the result lazily.