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.
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.
transPInst :: MonadPlus m => Inst MonadP (t m)Source
instP :: MonadPlus m => Inst MonadP mSource
A MonadPlus
is nothing but an algebra over the MonadP
monad. instP
provides it's structure map.