úÎ,Ö'á0      !"#$%&'()*+,-./ Safe-Inferred~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. 00portable provisionalEdward Kmett <ekmett@gmail.com> Trustworthy 12345678   12345678portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred  portable provisionalEdward Kmett <ekmett@gmail.com> Trustworthy 9    9portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred;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> Trustworthy/Create an Env using an environment and a value /Gets rid of the environment. This differs from ; in that it will A not continue extracting the value from the contained comonad. Retrieves the environment. Like 4, but modifies the resulting value with a function.  asks = f . ask 7Modifies the environment using the specified function. <=>?@ABCDEFGHIJ  <=>?@ABCDEFGHIJportable provisionalEdward Kmett <ekmett@gmail.com> Trustworthy=Create a Store using an accessor function and a stored value Read the stored value pos $ store fst (1,5)(1,5)!Set the stored value "pos . seek (3,7) $ store fst (1,5)(3,7)Seek satisfies the law  seek s = peek s . duplicate "Modify the stored value "pos . seeks swap $ store fst (1,5)(5,1)Seeks satisfies the law  seeks f = peeks f . duplicate #EPeek at what the current focus would be for a different stored value Peek satisfies the law # peek x . extend (peek y) = peek y $@Peek at what the current focus would be if the stored value was  modified by some function %IApplies a functor-valued function to the stored value, and then uses the - new accessor to read the resulting focus. /let f x = if x > 0 then Just (x^2) else Nothingexperiment f $ store (+1) 2Just 5experiment f $ store (+1) (-2)NothingK !"#$%LMNOPQRSTU  !"#$%  !"#$%K !"#$%LMNOPQRSTUportable provisionalEdward Kmett <ekmett@gmail.com> Trustworthy&'()*+,-./VWXYZ[\]^_` &'()*+,-./ )*+&'(,-./&'()*+,-./VWXYZ[\]^_`a      !""#$%&'()*+,--./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghicomonad-transformers-3.1Data.Functor.CompositionControl.Comonad.Trans.IdentityData.Functor.CoproductControl.Comonad.Trans.ClassControl.Comonad.Hoist.ClassControl.Comonad.Trans.EnvControl.Comonad.Trans.StoreControl.Comonad.Trans.Traced Composition decomposecomposetransformers-0.3.0.0Control.Monad.Trans.Identity IdentityT Coproduct getCoproductleftright coproduct runIdentityT ComonadTranslower ComonadHoistcohoistEnvTEnvenvrunEnvrunEnvT lowerEnvTaskaskslocalStoreTStorestorerunStore runStoreTposseekseekspeekpeeks experimentTracedT runTracedTTracedtraced runTracedtracelistenlistenscensor$fCompositionCompose$fContravariantCoproduct$fComonadCoproduct$fExtendCoproduct$fTraversable1Coproduct$fTraversableCoproduct$fFoldable1Coproduct$fFoldableCoproduct$fFunctorCoproduct$fComonadTransIdentityT$fComonadHoistIdentityT comonad-3.1Control.Comonadextract envTTyCon envTConstr envTDataType$fTraversableEnvT$fFoldableEnvT$fComonadApplyEnvT $fApplyEnvT$fComonadHoistEnvT$fComonadTransEnvT $fComonadEnvT $fExtendEnvT $fFunctorEnvT $fDataEnvT$fTypeableEnvT$fTypeable1EnvT storeTTyCon$fComonadHoistStoreT$fComonadTransStoreT$fComonadStoreT$fExtendStoreT$fApplicativeStoreT$fComonadApplyStoreT $fApplyStoreT$fFunctorStoreT$fTypeableStoreT$fTypeable1StoreT tracedTTyCon$fTypeable1TracedT$fDistributiveTracedT$fComonadHoistTracedT$fComonadTransTracedT$fComonadTracedT$fExtendTracedT$fApplicativeTracedT$fComonadApplyTracedT$fApplyTracedT$fFunctorTracedT