Copyright | (C) 2008-2013 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | provisional |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell2010 |
The environment comonad holds a value along with some retrievable context.
This module specifies the environment comonad transformer (aka coreader), which is left adjoint to the reader comonad.
The following sets up an experiment that retains its initial value in the background:
>>>
let initial = env 0 0
Extract simply retrieves the value:
>>>
extract initial
0
Play around with the value, in our case producing a negative value:
>>>
let experiment = fmap (+ 10) initial
>>>
extract experiment
10
Oh noes, something went wrong, 10 isn't very negative! Better restore the initial value using the default:
>>>
let initialRestored = experiment =>> ask
>>>
extract initialRestored
0
The strict environment comonad
The strict environment comonad transformer
EnvT e (w a) |
Instances
ComonadTraced m w => ComonadTraced m (EnvT e w) # | |
Defined in Control.Comonad.Traced.Class | |
ComonadStore s w => ComonadStore s (EnvT e w) # | |
Comonad w => ComonadEnv e (EnvT e w) # | |
Defined in Control.Comonad.Env.Class | |
ComonadHoist (EnvT e) # | |
ComonadTrans (EnvT e) # | |
Defined in Control.Comonad.Trans.Env | |
Functor w => Functor (EnvT e w) # | |
(Monoid e, Applicative m) => Applicative (EnvT e m) # | |
Foldable w => Foldable (EnvT e w) # | |
Defined in Control.Comonad.Trans.Env fold :: Monoid m => EnvT e w m -> m # foldMap :: Monoid m => (a -> m) -> EnvT e w a -> m # foldMap' :: Monoid m => (a -> m) -> EnvT e w a -> m # foldr :: (a -> b -> b) -> b -> EnvT e w a -> b # foldr' :: (a -> b -> b) -> b -> EnvT e w a -> b # foldl :: (b -> a -> b) -> b -> EnvT e w a -> b # foldl' :: (b -> a -> b) -> b -> EnvT e w a -> b # foldr1 :: (a -> a -> a) -> EnvT e w a -> a # foldl1 :: (a -> a -> a) -> EnvT e w a -> a # elem :: Eq a => a -> EnvT e w a -> Bool # maximum :: Ord a => EnvT e w a -> a # minimum :: Ord a => EnvT e w a -> a # | |
Traversable w => Traversable (EnvT e w) # | |
(Semigroup e, ComonadApply w) => ComonadApply (EnvT e w) # | |
Comonad w => Comonad (EnvT e w) # | |
(Data e, Typeable w, Data (w a), Data a) => Data (EnvT e w a) # | |
Defined in Control.Comonad.Trans.Env gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> EnvT e w a -> c (EnvT e w a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (EnvT e w a) # toConstr :: EnvT e w a -> Constr # dataTypeOf :: EnvT e w a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (EnvT e w a)) # dataCast2 :: Typeable t => (forall d e0. (Data d, Data e0) => c (t d e0)) -> Maybe (c (EnvT e w a)) # gmapT :: (forall b. Data b => b -> b) -> EnvT e w a -> EnvT e w a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EnvT e w a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EnvT e w a -> r # gmapQ :: (forall d. Data d => d -> u) -> EnvT e w a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> EnvT e w a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> EnvT e w a -> m (EnvT e w a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> EnvT e w a -> m (EnvT e w a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> EnvT e w a -> m (EnvT e w a) # |
lowerEnvT :: EnvT e w a -> w a #
Gets rid of the environment. This differs from extract
in that it will
not continue extracting the value from the contained comonad.