comonad-5.0.8: Comonads
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
Synopsis

The strict environment comonad

env :: e -> a -> Env e a Source #

Create an Env using an environment and a value

The strict environment comonad transformer

data EnvT e w a Source #

Constructors

EnvT e (w a)

Instances

Instances details
ComonadTraced m w => ComonadTraced m ( EnvT e w) Source #
Instance details

Defined in Control.Comonad.Traced.Class

Methods

trace :: m -> EnvT e w a -> a Source #

ComonadStore s w => ComonadStore s ( EnvT e w) Source #
Instance details

Defined in Control.Comonad.Store.Class

Methods

pos :: EnvT e w a -> s Source #

peek :: s -> EnvT e w a -> a Source #

peeks :: (s -> s) -> EnvT e w a -> a Source #

seek :: s -> EnvT e w a -> EnvT e w a Source #

seeks :: (s -> s) -> EnvT e w a -> EnvT e w a Source #

experiment :: Functor f => (s -> f s) -> EnvT e w a -> f a Source #

Comonad w => ComonadEnv e ( EnvT e w) Source #
Instance details

Defined in Control.Comonad.Env.Class

Methods

ask :: EnvT e w a -> e Source #

ComonadHoist ( EnvT e) Source #
Instance details

Defined in Control.Comonad.Trans.Env

Methods

cohoist :: ( Comonad w, Comonad v) => ( forall x. w x -> v x) -> EnvT e w a -> EnvT e v a Source #

ComonadTrans ( EnvT e) Source #
Instance details

Defined in Control.Comonad.Trans.Env

Methods

lower :: Comonad w => EnvT e w a -> w a Source #

Functor w => Functor ( EnvT e w) Source #
Instance details

Defined in Control.Comonad.Trans.Env

Methods

fmap :: (a -> b) -> EnvT e w a -> EnvT e w b Source #

(<$) :: a -> EnvT e w b -> EnvT e w a Source #

( Monoid e, Applicative m) => Applicative ( EnvT e m) Source #
Instance details

Defined in Control.Comonad.Trans.Env

Methods

pure :: a -> EnvT e m a Source #

(<*>) :: EnvT e m (a -> b) -> EnvT e m a -> EnvT e m b Source #

liftA2 :: (a -> b -> c) -> EnvT e m a -> EnvT e m b -> EnvT e m c Source #

(*>) :: EnvT e m a -> EnvT e m b -> EnvT e m b Source #

(<*) :: EnvT e m a -> EnvT e m b -> EnvT e m a Source #

Foldable w => Foldable ( EnvT e w) Source #
Instance details

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 #

sum :: Num a => EnvT e w a -> a Source #

product :: Num a => EnvT e w a -> a Source #

Traversable w => Traversable ( EnvT e w) Source #
Instance details

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 #
Instance details

Defined in Control.Comonad.Trans.Env

Methods

(<@>) :: EnvT e w (a -> b) -> EnvT e w a -> EnvT e w b Source #

(@>) :: EnvT e w a -> EnvT e w b -> EnvT e w b Source #

(<@) :: EnvT e w a -> EnvT e w b -> EnvT e w a Source #

Comonad w => Comonad ( EnvT e w) Source #
Instance details

Defined in Control.Comonad.Trans.Env

( Data e, Typeable w, Data (w a), Data a) => Data ( EnvT e w a) Source #
Instance details

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 #

runEnvT :: EnvT e w a -> (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.

Combinators

ask :: EnvT e w a -> e Source #

Retrieves the environment.

asks :: (e -> f) -> EnvT e w a -> f Source #

Like ask , but modifies the resulting value with a function.

asks = f . ask

local :: (e -> e') -> EnvT e w a -> EnvT e' w a Source #

Modifies the environment using the specified function.