Codensity f is the Monad generated by taking the right Kan extension
of any Functor f along itself (Ran f f).
This can often be more "efficient" to construct than f itself using
repeated applications of (>>=).
See "Asymptotic Improvement of Computations over Free Monads" by Janis Voigtländer for more information about this type.
https://www.janis-voigtlaender.eu/papers/AsymptoticImprovementOfComputationsOverFreeMonads.pdf
Constructors
CodensityrunCodensity :: forall (b :: k). (a -> m b) -> m b
Instances14MonadReader, MonadState, MonadFree, MonadTrans, Monad, Functor, …
(m ~~ m', MonadReader r m') => MonadReader r (Codensity m)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity(m ~~ m', MonadReader r m') => MonadState r (Codensity m)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity(m ~~ m', Functor f, MonadFree f m') => MonadFree f (Codensity m)Defined in kan-extensions-5.2.7 · Control.Monad.CodensityMonadTrans CodensityDefined in kan-extensions-5.2.7 · Control.Monad.CodensityMonad (Codensity f)Defined in kan-extensions-5.2.7 · Control.Monad.CodensityFunctor (Codensity k)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity(f ~~ f', MonadFail f') => MonadFail (Codensity f)Defined in kan-extensions-5.2.7 · Control.Monad.CodensityApplicative (Codensity f)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity(v ~~ v', Alternative v') => Alternative (Codensity v)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity(v ~~ v', Alternative v') => MonadPlus (Codensity v)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity(m ~~ m', MonadIO m') => MonadIO (Codensity m)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity(v ~~ v', Alt v') => Alt (Codensity v)Defined in kan-extensions-5.2.7 · Control.Monad.CodensityApply (Codensity f)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity(v ~~ v', Plus v') => Plus (Codensity v)Defined in kan-extensions-5.2.7 · Control.Monad.Codensity