`MonadPlus`

transformers. There are also `Monad`

and `MonadFix`

transformes, see the corresponding modules.

Note that each `MonadPlus`

transformer is also a `Monad`

transformer.

# Documentation

`MonadP m`

is actually a free `MonadPlus`

generated by `m`

. `MonadP`

is a monad itself (on the `(* -> *)`

category), as usually happens with free structures.

class TransM t => TransP t whereSource

A composable `MonadPlus`

transformer.

transPInst :: MonadPlus m => Inst MonadP (t m)Source

You shoudn't (and probably can't) use *anything* except for

, defined in this very module, as `instP`

`transPInst`

.

If you define `instance TransP T where transPInst = instP`

, then you would also need to define `instance MonadPlus m => MonadPlus (T m)`

somewhere in your code.

instP :: MonadPlus m => Inst MonadP mSource

A `MonadPlus`

is nothing but an algebra over the `MonadP`

monad. `instP`

provides it's structure map.