hbro-1.3.0.0: Minimal extensible web-browser

Safe HaskellSafe
LanguageHaskell98

Control.Monad.Reader.Extended

Description

This module provides a generic way to combine multiple MonadReader contexts into a single one.

Example

{-# LANGUAGE TupleSections #-}

f :: (MonadReader r m, Has A r, Has B r) => m ()
f = do
  (a :: A) <- ask
  (b :: B) <- ask
  doSomething a b

main = let a = makeA :: A
           b = makeB :: B
       in flip runReaderT (a, ()) . withReaderT (b,) $ f

Synopsis

Documentation

class Has a t where

Methods

get :: t -> a

Instances

Has' (Embedded a t HFalse) a t => Has a t

This instance means t = (t1, (t2, (... , (tn, ()) ...) ) such that a = ti for some i

ask :: (MonadReader r m, Has a r) => m a

Replacement for ask.

asks :: (MonadReader r m, Has a r) => (a -> b) -> m b

Replacement for asks.