MonadFix transformers. There are also
MonadPlus transformes, see the corresponding modules.
Note that each
MonadFix transformer is also a
MonadF m is actually a free
MonadFix generated by
MonadF is a monad itself (on the
(* -> *) category), as usually happens with free structures.
You shoudn't (and probably can't) use *anything* except for
, defined in this very module, as
If you define
instance TransF T where transFInst = instF, then you would also need to define
instance MonadFix m => MonadFix (T m) somewhere in your code.
MonadFix is nothing but an algebra over the
instF provides it's structure map.