free-4.2: Monads for free

# free-4.2: Monads for free

Free monads are useful for many tree-like structures and domain specific languages.

A `Monad` `n` is a free `Monad` for `f` if every `Monad` homomorphism from `n` to another monad `m` is equivalent to a natural transformation from `f` to `m`.

Cofree comonads provide convenient ways to talk about branching streams and rose-trees, and can be used to annotate syntax trees.

A `Comonad` `v` is a cofree `Comonad` for `f` if every `Comonad` homomorphism another comonad `w` to `v` is equivalent to a natural transformation from `w` to `f`.

Modules

- Control
  - Alternative
    - Control.Alternative.Free
  - Applicative
    - Control.Applicative.Free
  - Comonad
    - Control.Comonad.Cofree
      - Control.Comonad.Cofree.Class
    - Trans
      - Control.Comonad.Trans.Cofree
      - Control.Comonad.Trans.Coiter
  - Monad
    - Control.Monad.Free
      - Control.Monad.Free.Church
      - Control.Monad.Free.Class
    - Trans
      - Control.Monad.Trans.Free
      - Control.Monad.Trans.Iter
  - MonadPlus
    - Control.MonadPlus.Free