data Free f a
The free monad for a type constructor
Implemented in the spirit of Relection without Remorse, the free monad is represented using a sequential data structure in order to overcome the quadratic complexity of left-associated binds and traversal through the free monad structure.
Embed computations in one
Free monad as computations in the
for a coproduct type constructor.
This construction allows us to write computations which are polymorphic in
Free monad we use, allowing us to extend the functionality
of our monad later.