Reader
monadicon.icon
Overview
Defined in Control.Monad.Trans.Reader :
code:reader
newtype Reader r a = Reader {runReader :: r -> a}
For distributing read-only state.
code:readerMonadInstance.hs
instance Monad (Reader r) where
return x = Reader(\_ -> x)
m >>= g =
Reader (\ r -> runReader (g (runReader m r)) r)
-- Accessing the state:
ask :: Reader r r
ask = Reader (\r -> r)
-- Locally modifying the state:
local :: (r -> r) -> Reader r a -> Reader r a
local f m = Reader (\ r -> runReader m (f r))