SSH      !"#$%&'()*+ , - . / 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 TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~We often need to distinguish between various forms of Functor-like composition in Haskell in order to please the type system. 9 This lets us work with these representations uniformly. portable provisionalEdward Kmett <ekmett@gmail.com>    portable provisionalEdward Kmett <ekmett@gmail.com> retract . lift = id  | retract . liftF = id      portable provisionalEdward Kmett <ekmett@gmail.com>portable provisionalEdward Kmett <ekmett@gmail.com>portable provisionalEdward Kmett <ekmett@gmail.com>lower . section = id portable provisionalEdward Kmett <ekmett@gmail.com>  !" !" "! !"portable provisionalEdward Kmett <ekmett@gmail.com> !"portable provisionalEdward Kmett <ekmett@gmail.com> #$%&'()*#$%&'()*%&'#$()*#$$%&'()* portable provisionalEdward Kmett <ekmett@gmail.com> +,-./012+,-./012,-/+.021+,-./012 portable provisionalEdward Kmett <ekmett@gmail.com>34;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) 3434344 portable provisionalEdward Kmett <ekmett@gmail.com> 56789:;<=> 56789:;<=> 78956:>;<= 566789:;<=>portable provisionalEdward Kmett <ekmett@gmail.com> 56789:;<=> portable provisionalEdward Kmett <ekmett@gmail.com> ?@ABCDEFGH ?@ABCDEFGH ABC?@DEFGH ?@@ABCDEFGH portable provisionalEdward Kmett <ekmett@gmail.com> IJKLMNORead the current position PSeek to an absolute location  seek s = peek s . duplicate QSeek to a relative location  seeks f = peeks f . duplicate R-Peek at a value at a given absolute location # peek x . extend (peek y) = peek y S-Peek at a value at a given relative location IJKLMNOPQRS KLMIJNOPQRS IJJKLMNOPQRSportable provisionalEdward Kmett <ekmett@gmail.com> IJKLMNOPQRSTUVW(build a lens out of a getter and setter X#build a lens out of an isomorphism YZfunctional getter [\4functional getter, which acts like a field accessor ]^functional setter _`functional modify afunctorial modify bcdefghijklmnoTUVWXYZ[\]^_`abcdefghijklmnoTUVWXYZ[\]^_`abecfdghijklmnoTUVUVWXYZ[\]^_`abcdefghijklmnop#get the value of a lens into state qrs$set a value using a lens into state tu5infix modification a value through a lens into state vw8infix modification of a value through a lens into state  with a supplemental response xyz{|}~0TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~prstuvwx{y|z}~qpqrstuvwxyz{|}~#get the value of a lens into state $set a value using a lens into state 5infix modification a value through a lens into state 8infix modification of a value through a lens into state  with a supplemental response 0TUVWXYZ[\]^_`abcdefghijklmnoportable provisionalEdward Kmett <ekmett@gmail.com> Read the current position Seek to an absolute location  seek s = peek s . duplicate Seek to a relative location  seeks f = peeks f . duplicate -Peek at a value at a given absolute location # peek x . extend (peek y) = peek y -Peek at a value at a given relative location portable provisionalEdward Kmett <ekmett@gmail.com>Read the current position Seek to an absolute location  seek s = peek s . duplicate Seek to a relative location  seeks f = peeks f . duplicate -Peek at a value at a given absolute location # peek x . extend (peek y) = peek y -Peek at a value at a given relative location portable provisionalEdward Kmett <ekmett@gmail.com> portable provisionalEdward Kmett <ekmett@gmail.com>  !"#$$%&'()*+,-./012234567822345687 2 3 4 9 5 6 7 8 : ; < < = > ? @ A B C D < < = > ? @ D A B C E E F G H I J K L M NOOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}jklmnopqrstuvwxyz{|}EEFGHIJKLMNEFGHI~JKLMN 2 Ecomonad-transformers-1.7Control.Comonad.Trans.IdentityData.Functor.CompositionData.Functor.CoproductControl.Monad.Trans.FreeControl.Comonad.Trans.ClassControl.Comonad.Trans.Cofree"Control.Comonad.Trans.Discont.Lazy$Control.Comonad.Trans.Discont.Strict"Control.Comonad.Trans.Discont.MemoControl.Comonad.Hoist.ClassControl.Comonad.Trans.Env.Lazy Control.Comonad.Trans.Env.Strict Control.Comonad.Trans.Store.LazyData.Lens.CommonData.Lens.LazyData.Lens.Strict"Control.Comonad.Trans.Store.Strict Control.Comonad.Trans.Store.MemoControl.Comonad.Trans.Traced!Control.Comonad.Trans.Traced.MemoControl.Comonad.Trans.DiscontControl.Comonad.Trans.EnvControl.Comonad.Trans.Storetransformers-0.2.2.0Control.Monad.Trans.Identity runIdentityT IdentityT Composition decomposecompose Coproduct getCoproductleftright coproductFreePureliftFwrapretractiter ComonadTranslowerCofree:<unwrapcoiterunfoldsectionDiscontTDiscontdiscont runDiscont runDiscontTlabelcallCVdiscontT ComonadHoistcohoistEnvTEnvenvrunEnvrunEnvTaskaskslocal lowerEnvTStoreTStorestorerunStore runStoreTposseekseekspeekpeeksLensrunLenslensiso^$^$!^.^!^=^!=^%=^!%=^%%=^+=^-=^*=^!+=^!-=^!*=^/=^!/=fstLenssndLensmapLens intMapLenssetLens intSetLensaccessfocus~=!=%=!%=%%=!%%=+=-=*=!+=!-=!*=//=!/=&&=||=!&&=!||=storeT lowerStoreTTracedT runTracedTTracedtraced runTracedtracelistenlistenscensortracedT discontTTyCon envTTyCon envTConstr envTDataType storeTTyCon tracedTTyCon