comonad-5.0.2: Comonads

Copyright | (C) 2008-2014 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | experimental
Portability | non-portable (fundeps, MPTCs)
Safe Haskell | Safe
Language | Haskell2010

Control.Comonad.Env

Contents

- ComonadEnv class
- The Env comonad
- The EnvT comonad transformer
- Re-exported modules

Description

The Env comonad (aka the Coreader, Environment, or Product comonad)

A co-Kleisli arrow in the Env comonad is isomorphic to a Kleisli arrow in the reader monad.

(a -> e -> m) ~ (a, e) -> m ~ Env e a -> m

Synopsis

- class Comonad w => ComonadEnv e w | w -> e where
- asks :: ComonadEnv e w => (e -> e') -> w a -> e'
- local :: (e -> e') -> EnvT e w a -> EnvT e' w a
- type Env e = EnvT e Identity
- env :: e -> a -> Env e a
- runEnv :: Env e a -> (e, a)
- data EnvT e w a = EnvT e (w a)
- runEnvT :: EnvT e w a -> (e, w a)
- module Control.Comonad
- module Control.Comonad.Trans.Class

# ComonadEnv class

class Comonad w => ComonadEnv e w | w -> e where Source #

Minimal complete definition

ask

Methods

ask :: w a -> e Source #

Instances

ComonadEnv e (Arg e) Source # |
Methods ask :: Arg e a -> e Source #
ComonadEnv e ((,) e) Source # |
Methods ask :: (e, a) -> e Source #
(ComonadEnv e w, Monoid m) => ComonadEnv e (TracedT m w) Source # |
Methods ask :: TracedT m w a -> e Source #
ComonadEnv e w => ComonadEnv e (IdentityT * w) Source # |
Methods ask :: IdentityT * w a -> e Source #
ComonadEnv e w => ComonadEnv e (StoreT t w) Source # |
Methods ask :: StoreT t w a -> e Source #
Comonad w => ComonadEnv e (EnvT e w) Source # |
Methods ask :: EnvT e w a -> e Source #

asks :: ComonadEnv e w => (e -> e') -> w a -> e' Source #

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

Modifies the environment using the specified function.

# The Env comonad

type Env e = EnvT e Identity Source #

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

Create an Env using an environment and a value

runEnv :: Env e a -> (e, a) Source #

# The EnvT comonad transformer

data EnvT e w a Source #

Constructors

EnvT e (w a) |

Instances

Comonad w => ComonadEnv e (EnvT e w) Source # |
Methods ask :: EnvT e w a -> e Source #
ComonadStore s w => ComonadStore s (EnvT e w) Source # |
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 #
ComonadTraced m w => ComonadTraced m (EnvT e w) Source # |
Methods trace :: m -> EnvT e w a -> a Source #
ComonadHoist (EnvT e) Source # |
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 # |
Methods lower :: Comonad w => EnvT e w a -> w a Source #
Functor w => Functor (EnvT e w) Source # |
Methods fmap :: (a -> b) -> EnvT e w a -> EnvT e w b # (<$) :: a -> EnvT e w b -> EnvT e w a #
(Monoid e, Applicative m) => Applicative (EnvT e m) Source # |
Methods pure :: a -> EnvT e m a # (<*>) :: EnvT e m (a -> b) -> EnvT e m a -> EnvT e m b # (*>) :: EnvT e m a -> EnvT e m b -> EnvT e m b # (<*) :: EnvT e m a -> EnvT e m b -> EnvT e m a #
Foldable w => Foldable (EnvT e w) Source # |

Methods

fold :: Monoid m => EnvT e w m -> 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 #

toList :: EnvT e w a -> [a] #

null :: EnvT e w a -> Bool #

length :: EnvT e w a -> Int #

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 #

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

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

Traversable w => Traversable (EnvT e w) Source # |
Methods traverse :: Applicative f => (a -> f b) -> EnvT e w a -> f (EnvT e w b) # sequenceA :: Applicative f => EnvT e w (f a) -> f (EnvT e w a) # mapM :: Monad m => (a -> m b) -> EnvT e w a -> m (EnvT e w b) # sequence :: Monad m => EnvT e w (m a) -> m (EnvT e w a) #
(Semigroup e, ComonadApply w) => ComonadApply (EnvT e w) Source # |
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 # |
Methods extract :: EnvT e w a -> a Source # duplicate :: EnvT e w a -> EnvT e w (EnvT e w a) Source # extend :: (EnvT e w a -> b) -> EnvT e w a -> EnvT e w b Source #
(Data e, Typeable (* -> *) w, Data (w a), Data a) => Data (EnvT e w a) Source # |

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) #

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 b. (Data d, Data b) => c (t d b)) -> 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 :: (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) #

runEnvT :: EnvT e w a -> (e, w a) Source #

# Re-exported modules

module Control.Comonad

module Control.Comonad.Trans.Class