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 |
Control.Comonad.Trans.Env
Description
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
Constructors
EnvT e (w a) |
Instances
ComonadTraced m w => ComonadTraced m ( EnvT e w) Source # | |
Defined in Control.Comonad.Traced.Class |
|
ComonadStore s w => ComonadStore s ( EnvT e w) Source # | |
Defined in Control.Comonad.Store.Class |
|
Comonad w => ComonadEnv e ( EnvT e w) Source # | |
Defined in Control.Comonad.Env.Class |
|
ComonadHoist ( EnvT e) Source # | |
ComonadTrans ( EnvT e) Source # | |
Functor w => Functor ( EnvT e w) Source # | |
( Monoid e, Applicative m) => Applicative ( EnvT e m) Source # | |
Defined in Control.Comonad.Trans.Env |
|
Foldable w => Foldable ( EnvT e w) Source # | |
Defined in Control.Comonad.Trans.Env Methods fold :: Monoid m => EnvT e w m -> m Source # foldMap :: Monoid m => (a -> m) -> EnvT e w a -> m Source # foldMap' :: Monoid m => (a -> m) -> EnvT e w a -> m Source # foldr :: (a -> b -> b) -> b -> EnvT e w a -> b Source # foldr' :: (a -> b -> b) -> b -> EnvT e w a -> b Source # foldl :: (b -> a -> b) -> b -> EnvT e w a -> b Source # foldl' :: (b -> a -> b) -> b -> EnvT e w a -> b Source # foldr1 :: (a -> a -> a) -> EnvT e w a -> a Source # foldl1 :: (a -> a -> a) -> EnvT e w a -> a Source # toList :: EnvT e w a -> [a] Source # null :: EnvT e w a -> Bool Source # length :: EnvT e w a -> Int Source # elem :: Eq a => a -> EnvT e w a -> Bool Source # maximum :: Ord a => EnvT e w a -> a Source # minimum :: Ord a => EnvT e w a -> a Source # |
|
Traversable w => Traversable ( EnvT e w) Source # | |
Defined in Control.Comonad.Trans.Env Methods traverse :: Applicative f => (a -> f b) -> EnvT e w a -> f ( EnvT e w b) Source # sequenceA :: Applicative f => EnvT e w (f a) -> f ( EnvT e w a) Source # mapM :: Monad m => (a -> m b) -> EnvT e w a -> m ( EnvT e w b) Source # sequence :: Monad m => EnvT e w (m a) -> m ( EnvT e w a) Source # |
|
( Semigroup e, ComonadApply w) => ComonadApply ( EnvT e w) Source # | |
Comonad w => Comonad ( EnvT e w) Source # | |
( Data e, Typeable w, Data (w a), Data a) => Data ( EnvT e w a) Source # | |
Defined in Control.Comonad.Trans.Env Methods 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) Source # gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c ( EnvT e w a) Source # toConstr :: EnvT e w a -> Constr Source # dataTypeOf :: EnvT e w a -> DataType Source # dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c ( EnvT e w a)) Source # dataCast2 :: Typeable t => ( forall d e0. ( Data d, Data e0) => c (t d e0)) -> Maybe (c ( EnvT e w a)) Source # gmapT :: ( forall b. Data b => b -> b) -> EnvT e w a -> EnvT e w a Source # gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> EnvT e w a -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> EnvT e w a -> r Source # gmapQ :: ( forall d. Data d => d -> u) -> EnvT e w a -> [u] Source # gmapQi :: Int -> ( forall d. Data d => d -> u) -> EnvT e w a -> u Source # gmapM :: Monad m => ( forall d. Data d => d -> m d) -> EnvT e w a -> m ( EnvT e w a) Source # gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> EnvT e w a -> m ( EnvT e w a) Source # gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> EnvT e w a -> m ( EnvT e w a) Source # |
lowerEnvT :: EnvT e w a -> w a Source #
Gets rid of the environment. This differs from
extract
in that it will
not continue extracting the value from the contained comonad.