10:44]
@loganmac Another way to think of the free monad over f
is to say we want expressions of the form x >>= \a -> y >>= \b -> z ...
where x, y, z :: f _
[10:45]
So we just make a type by expanding f
to include those terms, purely symbolically. But then to be a Monad
we need the laws to hold, so we equate terms which the laws say have to be equal
[10:46]
So finding the free monad over f
is to find the "smallest" lawful monad which includes all such terms