[doc update ekmett@gmail.com**20090413084319 Ignore-this: eded8d4d8660e964b61b8630317be216 ] { hunk ./doc/html/monad-ran/Control-Monad-Ran-Cont.html 77 ->datanewtypeshow/hide Instances
Monad (Cont r)
Functor (Cont r)
Applicative (Cont r)
MonadCont (Cont r)
runCont :: Cont r a -> (a -> r) -> rSource
idCont :: Cont a a -> aSource
mapCont :: (r -> r) -> Cont r a -> Cont r aSource
withCont :: ((b -> r) -> a -> r) -> Cont r a -> Cont r bSource
shift :: ((a -> Cont s r) -> Cont r r) -> Cont r aSource
reset :: Cont a a -> Cont r aSource
newtype Cont' r a Source
Cont'ContgetCont'getContreset(Cont +(Cont(..) hunk ./doc/html/monad-ran/src/Control-Monad-Ran-Cont.html 12 -,idCont -,mapCont -,withCont -,shift -,reset -,Cont'(..) -,runCont' -,moduleControl.Monad.Cont.Class -)where - -importControl.Applicative -importControl.Monad -importControl.Monad.Ran.Codensity -importUnsafe.Coerce -importControl.Monad.Cont.Class +,moduleControl.Monad.Cont.Class +)where + +importControl.Applicative +importControl.Monad +importControl.Monad.Cont.Class +importControl.Monad.Ran +importControl.Monad.Ran.Codensity + +-- traditional Cont derived as a codensity monad showing why the above is unnecessary +newtypeContra=Cont{getCont::Codensity(Constr)a} +deriving(Functor,Applicative,Monad,RanIso(Constr)(Constr)) + +instanceMonadCont(Contr)where +callCCf=Cont(Codensity(\k->getCodensity(getCont(f(\a->Cont(Codensity(\_->Const(getConst((ka))))))))k)) hunk ./doc/html/monad-ran/src/Control-Monad-Ran-Cont.html 28 -newtypeContra=Cont{getCont::forallo.(a->r)->(r->o)->o} - -instanceFunctor(Contr)where -fmapf(Contg)=Cont(\k->g(k.f)) - -instanceApplicative(Contr)where -pure=return -(<*>)=ap - -instanceMonad(Contr)where -returna=Cont(\kz->z(ka)) -Contg>>=f=Cont(\k->g(\a->getCont(fa)kid)) - -runCont::Contra->(a->r)->r -runCont(Contg)=flipgid - -idCont::Contaa->a -idCont=fliprunContid - -mapCont::(r->r)->Contra->Contra -mapContf(Contg)=Cont(\k->g(f.k)) --- mapCont f (Cont g) = Cont (\k z -> g k (z . f)) - -withCont::((b->r)->(a->r))->Contra->Contrb -withContf(Contg)=Cont(g.f) --- withCont f (Cont g) = Cont (\k -> g (f k)) - -instanceMonadCont(Contr)where -callCCf=Cont(\k->getCont(f(\a->Cont(\_h->(h.k)a)))k) - -shift::((a->Contsr)->Contrr)->Contra -shiftf=Cont(\k->getCont(f(\a->Cont(\eh->(h.e.k)a)))id) - -reset::Contaa->Contra -resetm=Cont(\kz->(z.k)(runContmid)) - --- traditional Cont derived as a codensity monad showing why the above is unnecessary -newtypeCont'ra=Cont'{getCont'::Codensity(Constr)a} -deriving(Functor,Applicative,Monad) - -instanceMonadCont(Cont'r)where -callCCf=Cont'(Codensity(\k->getCodensity(getCont'(f(\a->Cont'(Codensity(\_->Const(getConst((ka))))))))k)) - -runCont'::Cont'ra->(a->r)->r -runCont'(Cont'f)k=getConst(getCodensityf(Const.k)) +runCont::Contra->(a->r)->r +runCont(Contf)k=getConst(getCodensityf(Const.k)) }
Cont'ContgetCont'getContshow/hideshow/hide
RanIso (Const r) (Const r) (ContrunCont' :: Cont'runCont :: Cont
RanIso (Const r) (Const r) (Cont r)
RanIso (Const r) (Const r) (Cont r)
Cont
idCont
mapCont
runCont'
shift
withCont