kan-extensions-3.0: Kan extensions, the Yoneda lemma, and (co)density (co)monads

Portabilitynon-portable (rank-2 polymorphism)
Stabilityprovisional
MaintainerEdward Kmett <ekmett@gmail.com>
Safe HaskellNone

Control.Monad.Codensity

Description

 

Synopsis

Documentation

newtype Codensity m a Source

Constructors

Codensity 

Fields

runCodensity :: forall b. (a -> m b) -> m b
 

Instances

MonadTrans Codensity 
(Functor f, MonadFree f m) => MonadFree f (Codensity m) 
MonadReader r m => MonadState r (Codensity m) 
Monad (Codensity f) 
Functor (Codensity k) 
MonadPlus v => MonadPlus (Codensity v) 
Applicative (Codensity f) 
Alternative v => Alternative (Codensity v) 
Apply (Codensity f) 
MonadSpec (Codensity m) 
MonadIO m => MonadIO (Codensity m) 

improve :: Functor f => (forall m. MonadFree f m => m a) -> Free f aSource

Right associate all binds in a computation that generates a free monad This can improve the asymptotic efficiency of the result, while preserving semantics.