{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, UndecidableInstances #-} {- | Module : Control.Monad.ReaderX.Class Copyright : (c) Mark Snyder 2008. License : BSD-style Maintainer : Mark Snyder, marks@ittc.ku.edu Stability : experimental Portability : non-portable (multi-param classes, functional dependencies) -} module Control.Monad.ReaderX.Class ( MonadReaderX(..), asksx, ) where import Control.Monad.Index class (Monad m, Index ix) => MonadReaderX ix r m | ix m -> r where askx :: ix -> m r localx :: ix -> (r -> r) -> m a -> m a asksx :: (MonadReaderX ix r m) => ix -> (r -> a) -> m a asksx ixv f = do r <- askx ixv return (f r)