W3cubDocs

/Haskell 9

Control.Monad.Trans.RWS.Lazy

Copyright (c) Andy Gill 2001
(c) Oregon Graduate Institute of Science and Technology 2001
License BSD-style (see the file LICENSE)
Maintainer [email protected]
Stability experimental
Portability portable
Safe Haskell Safe
Language Haskell2010

Description

A monad transformer that combines ReaderT, WriterT and StateT. This version is lazy; for a constant-space version with almost the same interface, see Control.Monad.Trans.RWS.CPS.

The RWS monad

type RWS r w s = RWST r w s Identity Source

A monad containing an environment of type r, output of type w and an updatable state of type s.

rws :: (r -> s -> (a, s, w)) -> RWS r w s a Source

Construct an RWS computation from a function. (The inverse of runRWS.)

runRWS :: RWS r w s a -> r -> s -> (a, s, w) Source

Unwrap an RWS computation as a function. (The inverse of rws.)

evalRWS Source

Arguments

:: RWS r w s a

RWS computation to execute

-> r

initial environment

-> s

initial value

-> (a, w)

final value and output

Evaluate a computation with the given initial state and environment, returning the final value and output, discarding the final state.

execRWS Source

Arguments

:: RWS r w s a

RWS computation to execute

-> r

initial environment

-> s

initial value

-> (s, w)

final state and output

Evaluate a computation with the given initial state and environment, returning the final state and output, discarding the final value.

mapRWS :: ((a, s, w) -> (b, s, w')) -> RWS r w s a -> RWS r w' s b Source

Map the return value, final state and output of a computation using the given function.

withRWS :: (r' -> s -> (r, s)) -> RWS r w s a -> RWS r' w s a Source

withRWS f m executes action m with an initial environment and state modified by applying f.

The RWST monad transformer

newtype RWST r w s (m :: Type -> Type) a Source

A monad transformer adding reading an environment of type r, collecting an output of type w and updating a state of type s to an inner monad m.

Constructors

RWST

Fields

Instances
Instances details
Monoid w => MonadTrans (RWST r w s) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

lift :: Monad m => m a -> RWST r w s m a Source

Contravariant m => Contravariant (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

contramap :: (a' -> a) -> RWST r w s m a -> RWST r w s m a' Source

(>$) :: b -> RWST r w s m b -> RWST r w s m a Source

(Monoid w, Functor m, MonadPlus m) => Alternative (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

empty :: RWST r w s m a

(<|>) :: RWST r w s m a -> RWST r w s m a -> RWST r w s m a

some :: RWST r w s m a -> RWST r w s m [a]

many :: RWST r w s m a -> RWST r w s m [a]

(Monoid w, Functor m, Monad m) => Applicative (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

pure :: a -> RWST r w s m a

(<*>) :: RWST r w s m (a -> b) -> RWST r w s m a -> RWST r w s m b

liftA2 :: (a -> b -> c) -> RWST r w s m a -> RWST r w s m b -> RWST r w s m c

(*>) :: RWST r w s m a -> RWST r w s m b -> RWST r w s m b

(<*) :: RWST r w s m a -> RWST r w s m b -> RWST r w s m a

Functor m => Functor (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

fmap :: (a -> b) -> RWST r w s m a -> RWST r w s m b

(<$) :: a -> RWST r w s m b -> RWST r w s m a

(Monoid w, Monad m) => Monad (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

(>>=) :: RWST r w s m a -> (a -> RWST r w s m b) -> RWST r w s m b

(>>) :: RWST r w s m a -> RWST r w s m b -> RWST r w s m b

return :: a -> RWST r w s m a

(Monoid w, MonadPlus m) => MonadPlus (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

mzero :: RWST r w s m a

mplus :: RWST r w s m a -> RWST r w s m a -> RWST r w s m a

(Monoid w, MonadFail m) => MonadFail (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

fail :: String -> RWST r w s m a

(Monoid w, MonadFix m) => MonadFix (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

mfix :: (a -> RWST r w s m a) -> RWST r w s m a

(Monoid w, MonadIO m) => MonadIO (RWST r w s m) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

liftIO :: IO a -> RWST r w s m a

Generic (RWST r w s m a) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Associated Types

type Rep (RWST r w s m a)
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

type Rep (RWST r w s m a) = D1 ('MetaData "RWST" "Control.Monad.Trans.RWS.Lazy" "transformers-0.6.1.2-72bd" 'True) (C1 ('MetaCons "RWST" 'PrefixI 'True) (S1 ('MetaSel ('Just "runRWST") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (r -> s -> m (a, s, w)))))

Methods

from :: RWST r w s m a -> Rep (RWST r w s m a) x

to :: Rep (RWST r w s m a) x -> RWST r w s m a

type Rep (RWST r w s m a) Source
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

type Rep (RWST r w s m a) = D1 ('MetaData "RWST" "Control.Monad.Trans.RWS.Lazy" "transformers-0.6.1.2-72bd" 'True) (C1 ('MetaCons "RWST" 'PrefixI 'True) (S1 ('MetaSel ('Just "runRWST") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (r -> s -> m (a, s, w)))))

evalRWST Source

Arguments

:: Monad m
=> RWST r w s m a

computation to execute

-> r

initial environment

-> s

initial value

-> m (a, w)

computation yielding final value and output

Evaluate a computation with the given initial state and environment, returning the final value and output, discarding the final state.

execRWST Source

Arguments

:: Monad m
=> RWST r w s m a

computation to execute

-> r

initial environment

-> s

initial value

-> m (s, w)

computation yielding final state and output

Evaluate a computation with the given initial state and environment, returning the final state and output, discarding the final value.

mapRWST :: (m (a, s, w) -> n (b, s, w')) -> RWST r w s m a -> RWST r w' s n b Source

Map the inner computation using the given function.

withRWST :: forall r' s r w (m :: Type -> Type) a. (r' -> s -> (r, s)) -> RWST r w s m a -> RWST r' w s m a Source

withRWST f m executes action m with an initial environment and state modified by applying f.

Reader operations

reader :: forall w (m :: Type -> Type) r a s. (Monoid w, Monad m) => (r -> a) -> RWST r w s m a Source

Constructor for computations in the reader monad (equivalent to asks).

ask :: forall w (m :: Type -> Type) r s. (Monoid w, Monad m) => RWST r w s m r Source

Fetch the value of the environment.

local :: forall r w s (m :: Type -> Type) a. (r -> r) -> RWST r w s m a -> RWST r w s m a Source

Execute a computation in a modified environment

asks :: forall w (m :: Type -> Type) r a s. (Monoid w, Monad m) => (r -> a) -> RWST r w s m a Source

Retrieve a function of the current environment.

Writer operations

writer :: forall (m :: Type -> Type) a w r s. Monad m => (a, w) -> RWST r w s m a Source

Construct a writer computation from a (result, output) pair.

tell :: forall (m :: Type -> Type) w r s. Monad m => w -> RWST r w s m () Source

tell w is an action that produces the output w.

listen :: forall (m :: Type -> Type) r w s a. Monad m => RWST r w s m a -> RWST r w s m (a, w) Source

listen m is an action that executes the action m and adds its output to the value of the computation.

listens :: forall (m :: Type -> Type) w b r s a. Monad m => (w -> b) -> RWST r w s m a -> RWST r w s m (a, b) Source

listens f m is an action that executes the action m and adds the result of applying f to the output to the value of the computation.

pass :: forall (m :: Type -> Type) r w s a. Monad m => RWST r w s m (a, w -> w) -> RWST r w s m a Source

pass m is an action that executes the action m, which returns a value and a function, and returns the value, applying the function to the output.

censor :: forall (m :: Type -> Type) w r s a. Monad m => (w -> w) -> RWST r w s m a -> RWST r w s m a Source

censor f m is an action that executes the action m and applies the function f to its output, leaving the return value unchanged.

State operations

state :: forall w (m :: Type -> Type) s a r. (Monoid w, Monad m) => (s -> (a, s)) -> RWST r w s m a Source

Construct a state monad computation from a state transformer function.

get :: forall w (m :: Type -> Type) r s. (Monoid w, Monad m) => RWST r w s m s Source

Fetch the current value of the state within the monad.

put :: forall w (m :: Type -> Type) s r. (Monoid w, Monad m) => s -> RWST r w s m () Source

put s sets the state within the monad to s.

modify :: forall w (m :: Type -> Type) s r. (Monoid w, Monad m) => (s -> s) -> RWST r w s m () Source

modify f is an action that updates the state to the result of applying f to the current state.

gets :: forall w (m :: Type -> Type) s a r. (Monoid w, Monad m) => (s -> a) -> RWST r w s m a Source

Get a specific component of the state, using a projection function supplied.

Lifting other operations

liftCallCC :: Monoid w => CallCC m (a, s, w) (b, s, w) -> CallCC (RWST r w s m) a b Source

Uniform lifting of a callCC operation to the new monad. This version rolls back to the original state on entering the continuation.

liftCallCC' :: Monoid w => CallCC m (a, s, w) (b, s, w) -> CallCC (RWST r w s m) a b Source

In-situ lifting of a callCC operation to the new monad. This version uses the current state on entering the continuation.

liftCatch :: Catch e m (a, s, w) -> Catch e (RWST r w s m) a Source

Lift a catchE operation to the new monad. The uniformity property (see Control.Monad.Signatures) implies that the lifted catchE discards any output or changes to the state from the body on entering the handler.

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/transformers-0.6.1.2-72bd/Control-Monad-Trans-RWS-Lazy.html