4-~      !"#$%&'()*+,- . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T UVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}portable provisionalEdward Kmett <ekmett@gmail.com>portable provisionalEdward Kmett <ekmett@gmail.com>    portable provisionalEdward Kmett <ekmett@gmail.com>portable provisionalEdward Kmett <ekmett@gmail.com>     portable provisionalEdward Kmett <ekmett@gmail.com> ~   portable provisionalEdward Kmett <ekmett@gmail.com> portable provisionalEdward Kmett <ekmett@gmail.com> portable provisionalEdward Kmett <ekmett@gmail.com>  !"#$ !"#$! "$# !"#$portable provisionalEdward Kmett <ekmett@gmail.com> !"#$portable provisionalEdward Kmett <ekmett@gmail.com> %&'()*+,%&'()*+,&')%(*,+%&'()*+, portable provisionalEdward Kmett <ekmett@gmail.com>-.;Ideally we would offer a way to lift comonad homomorphisms  but this isn'4t Haskell 98, so we settle for the most common case  here. 8 liftTrans :: (forall a. w a -> v a) -> t w a -> t v a * cohoist = liftTrans (Identity . extract) -.-.-.. portable provisionalEdward Kmett <ekmett@gmail.com> /01234567 /01234567 123/04567 /001234567portable provisionalEdward Kmett <ekmett@gmail.com> /01234567 portable provisionalEdward Kmett <ekmett@gmail.com> 89:;<=>?@ 89:;<=>?@ :;<89=>?@ 899:;<=>?@ portable provisionalEdward Kmett <ekmett@gmail.com> ABCDEFGHIJ ABCDEFGHIJ CDEABFGHIJ ABBCDEFGHIJportable provisionalEdward Kmett <ekmett@gmail.com> ABCDEFGHIJ portable provisionalEdward Kmett <ekmett@gmail.com> KLMNOPQRST KLMNOPQRST MNOKLPQRST KLLMNOPQRSTportable provisionalEdward Kmett <ekmett@gmail.com> UVWXYZ[\]^ UVWXYZ[\]^ VWXUZY[\]^ UVWXYZ[\]^portable provisionalEdward Kmett <ekmett@gmail.com> UVWXYZ[\]^portable provisionalEdward Kmett <ekmett@gmail.com> _`abcdefgh _`abcdefgh `ab_dcefgh _`abcdefghportable provisionalEdward Kmett <ekmett@gmail.com> ijklmnopqr ijklmnopqr lmnijkopqr ijkjklmnopqrportable provisionalEdward Kmett <ekmett@gmail.com>sEThe f-branching stream comonad transformer is a comonadic version of  the "ListT done Right"> monad transformer. You can extract the underlying comonadic  value by using   or runStream tuvwxIsomorphic to the definition: ' data Stream f a = a :< f (Stream f a) y cons onto an f-branching stream z"uncons from an f-branching stream {unfold a stream from a seed. |} stuvwxyz{|} xyz{stu|}vw stutuvwwxyz{|} !"##$%&'()##$%&')(#$%*&'()#$%*&'() + , - - . / 0 1 2 3 4 - - . / 0 1 2 3 4 5 5 6 7 8 9 : ; < = 5 5 6 7 8 9 : ; < =56789>:;<=56789>:;<=??@ABCDEFGHHIJKLMNOPQRR#R#R S T U S T U V V5V5VWXYZ[\]^_`abcomonad-transformers-1.0.1Control.Comonad.Trans.IdentityData.Functor.Extend.Trans.ClassData.Functor.CoproductControl.Comonad.Trans.Class"Control.Comonad.Trans.Discont.Lazy$Control.Comonad.Trans.Discont.Strict'Control.Comonad.Trans.Discont.Memo.Lazy)Control.Comonad.Trans.Discont.Memo.StrictControl.Comonad.Hoist.ClassControl.Comonad.Trans.Env.Lazy Control.Comonad.Trans.Env.Strict Control.Comonad.Trans.Store.Lazy"Control.Comonad.Trans.Store.Strict%Control.Comonad.Trans.Store.Memo.Lazy'Control.Comonad.Trans.Store.Memo.StrictControl.Comonad.Trans.TracedControl.Comonad.Trans.StreamControl.Comonad.Trans.Discont"Control.Comonad.Trans.Discont.MemoControl.Comonad.Trans.EnvControl.Comonad.Trans.Store Control.Comonad.Trans.Store.Memotransformers-0.2.2.0Control.Monad.Trans.Identity runIdentityT IdentityT ExtendTranslower Coproduct getCoproductleftright coproduct ComonadTransDiscontTDiscontdiscont runDiscont runDiscontTlabelcallCVdiscontT ComonadHoistcohoistEnvTEnvenvrunEnvrunEnvTaskaskslocalStoreTStorestorerunStore runStoreTgetputmodify experimentstoreTTracedT runTracedTTracedtraced runTracedtracelistenlistenscensorStreamT runStreamTNode:<Streamstream runStreamunfoldstailsunfoldsW discontTTyCon envTTyCon envTConstr envTDataType storeTTyCon tracedTTyConfstNsndNtypeFtypeW nodeTyCon streamTTyCon streamTConstrstreamTDataType nodeConstr nodeDataType