parameterized-0.5.0.0: Parameterized/indexed monoids and monads using only a single parameter type variable.
Safe HaskellNone
LanguageHaskell2010

Parameterized.Control.Monad.Trans.Reader

Synopsis

Documentation

newtype OverlappingWhichReader (m :: Type -> Type) r a Source #

Given a Reader that accepts Which a, and another Reader that accepts Which b make a reader that accepts Which (AppendUnique a b) and runs both readers if possible, where the types in Which a and Which b may overlap, but with the compile time constraint that all the types in (AppendUnique a b) are distinct.

Instances

Instances details
Alternative m => PEmpty (OverlappingWhichReader m :: Type -> Type -> Type) (Which ('[] :: [Type])) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

pempty :: PUnary (OverlappingWhichReader m) (Which ('[] :: [Type])) a Source #

Applicative m => PPointed (OverlappingWhichReader m :: Type -> Type -> Type) (Which ('[] :: [Type])) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

ppure :: a -> PUnary (OverlappingWhichReader m) (Which ('[] :: [Type])) a Source #

(Alternative m, Reinterpret b c, Reinterpret a c, c ~ AppendUnique a b) => PAlternative (OverlappingWhichReader m :: Type -> Type -> Type) (Which a :: Type) (Which b :: Type) (Which c :: Type) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

MonadIO m => MonadIO (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

liftIO :: IO a -> OverlappingWhichReader m r a #

MonadZip m => MonadZip (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Alternative m => Alternative (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Applicative m => Applicative (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Functor m => Functor (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

fmap :: (a -> b) -> OverlappingWhichReader m r a -> OverlappingWhichReader m r b #

(<$) :: a -> OverlappingWhichReader m r b -> OverlappingWhichReader m r a #

Monad m => Monad (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

MonadPlus m => MonadPlus (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

MonadFail m => MonadFail (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

fail :: String -> OverlappingWhichReader m r a #

MonadFix m => MonadFix (OverlappingWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

mfix :: (a -> OverlappingWhichReader m r a) -> OverlappingWhichReader m r a #

Generic (OverlappingWhichReader m r a) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Associated Types

type Rep (OverlappingWhichReader m r a) 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type Rep (OverlappingWhichReader m r a) = D1 ('MetaData "OverlappingWhichReader" "Parameterized.Control.Monad.Trans.Reader" "parameterized-0.5.0.0-4cLjzvLNqgFEID3wSIvExK" 'True) (C1 ('MetaCons "OverlappingWhichReader" 'PrefixI 'True) (S1 ('MetaSel ('Just "runOverlappingWhichReader") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ReaderT r m a))))
type PUnary (OverlappingWhichReader m :: Type -> Type -> Type) (r :: Type) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type Rep (OverlappingWhichReader m r a) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type Rep (OverlappingWhichReader m r a) = D1 ('MetaData "OverlappingWhichReader" "Parameterized.Control.Monad.Trans.Reader" "parameterized-0.5.0.0-4cLjzvLNqgFEID3wSIvExK" 'True) (C1 ('MetaCons "OverlappingWhichReader" 'PrefixI 'True) (S1 ('MetaSel ('Just "runOverlappingWhichReader") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ReaderT r m a))))

newtype DistinctWhichReader (m :: Type -> Type) r a Source #

Given a Reader that accepts Which a, and another Reader that accepts Which b make a reader that accepts Which (Append a b) and only run one of the readers for the correct Which type, with a compile-time contraint that the types in Which a are distinct from the type in Which b The advantage of DistinctWhichReader over OverlappingWhichReader is that pappend doesn't require the inner monad m to be an Alternative. NB. PEmpty still requires Alternative but you don't need to be an instance of PEmpty (analogous to Semigroup)

Constructors

DistinctWhichReader 

Instances

Instances details
Alternative m => PEmpty (DistinctWhichReader m :: Type -> Type -> Type) (Which ('[] :: [Type])) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

pempty :: PUnary (DistinctWhichReader m) (Which ('[] :: [Type])) a Source #

Applicative m => PPointed (DistinctWhichReader m :: Type -> Type -> Type) (Which ('[] :: [Type])) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

ppure :: a -> PUnary (DistinctWhichReader m) (Which ('[] :: [Type])) a Source #

(Reinterpret b c, Complement c b ~ a, Complement c a ~ b, c ~ Append a b) => PAlternative (DistinctWhichReader m :: Type -> Type -> Type) (Which a :: Type) (Which b :: Type) (Which c :: Type) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

MonadIO m => MonadIO (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

liftIO :: IO a -> DistinctWhichReader m r a #

MonadZip m => MonadZip (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Alternative m => Alternative (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Applicative m => Applicative (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Functor m => Functor (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

fmap :: (a -> b) -> DistinctWhichReader m r a -> DistinctWhichReader m r b #

(<$) :: a -> DistinctWhichReader m r b -> DistinctWhichReader m r a #

Monad m => Monad (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

MonadPlus m => MonadPlus (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

MonadFail m => MonadFail (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

fail :: String -> DistinctWhichReader m r a #

MonadFix m => MonadFix (DistinctWhichReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

mfix :: (a -> DistinctWhichReader m r a) -> DistinctWhichReader m r a #

Generic (DistinctWhichReader m r a) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Associated Types

type Rep (DistinctWhichReader m r a) 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type Rep (DistinctWhichReader m r a) = D1 ('MetaData "DistinctWhichReader" "Parameterized.Control.Monad.Trans.Reader" "parameterized-0.5.0.0-4cLjzvLNqgFEID3wSIvExK" 'True) (C1 ('MetaCons "DistinctWhichReader" 'PrefixI 'True) (S1 ('MetaSel ('Just "runDistinctWhichReader") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ReaderT r m a))))
type PUnary (DistinctWhichReader m :: Type -> Type -> Type) (r :: Type) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type Rep (DistinctWhichReader m r a) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type Rep (DistinctWhichReader m r a) = D1 ('MetaData "DistinctWhichReader" "Parameterized.Control.Monad.Trans.Reader" "parameterized-0.5.0.0-4cLjzvLNqgFEID3wSIvExK" 'True) (C1 ('MetaCons "DistinctWhichReader" 'PrefixI 'True) (S1 ('MetaSel ('Just "runDistinctWhichReader") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ReaderT r m a))))

newtype ManyReader (m :: Type -> Type) r a Source #

Given a Reader that accepts Many a, and another Reader that accepts Many b make a reader that accepts Many (AppendUnique a b) with the compile time constraint that all the types in (AppendUnique a b) are distinct.

Constructors

ManyReader 

Fields

Instances

Instances details
Alternative m => PEmpty (ManyReader m :: Type -> Type -> Type) (Many ('[] :: [Type])) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

pempty :: PUnary (ManyReader m) (Many ('[] :: [Type])) a Source #

Applicative m => PPointed (ManyReader m :: Type -> Type -> Type) (Many ('[] :: [Type])) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

ppure :: a -> PUnary (ManyReader m) (Many ('[] :: [Type])) a Source #

(Alternative m, Select a c, Select b c, c ~ AppendUnique a b) => PAlternative (ManyReader m :: Type -> Type -> Type) (Many a :: Type) (Many b :: Type) (Many c :: Type) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

pappend :: PUnary (ManyReader m) (Many a) a0 -> PUnary (ManyReader m) (Many b) a0 -> PUnary (ManyReader m) (Many c) a0 Source #

(Functor (ManyReader m (Many c)), Applicative m, Select a c, Select b c, c ~ AppendUnique a b) => PApplicative (ManyReader m :: Type -> Type -> Type) (Many a :: Type) (Many b :: Type) (Many c :: Type) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

papply :: PUnary (ManyReader m) (Many a) (a0 -> b0) -> PUnary (ManyReader m) (Many b) a0 -> PUnary (ManyReader m) (Many c) b0 Source #

(Functor (ManyReader m (Many c)), Monad m, Select a c, Select b c, c ~ AppendUnique a b) => PMonad (ManyReader m :: Type -> Type -> Type) (Many a :: Type) (Many b :: Type) (Many c :: Type) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

pbind :: PUnary (ManyReader m) (Many a) a0 -> (a0 -> PUnary (ManyReader m) (Many b) b0) -> PUnary (ManyReader m) (Many c) b0 Source #

MonadIO m => MonadIO (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

liftIO :: IO a -> ManyReader m r a #

MonadZip m => MonadZip (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

mzip :: ManyReader m r a -> ManyReader m r b -> ManyReader m r (a, b) #

mzipWith :: (a -> b -> c) -> ManyReader m r a -> ManyReader m r b -> ManyReader m r c #

munzip :: ManyReader m r (a, b) -> (ManyReader m r a, ManyReader m r b) #

Alternative m => Alternative (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

empty :: ManyReader m r a #

(<|>) :: ManyReader m r a -> ManyReader m r a -> ManyReader m r a #

some :: ManyReader m r a -> ManyReader m r [a] #

many :: ManyReader m r a -> ManyReader m r [a] #

Applicative m => Applicative (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

pure :: a -> ManyReader m r a #

(<*>) :: ManyReader m r (a -> b) -> ManyReader m r a -> ManyReader m r b #

liftA2 :: (a -> b -> c) -> ManyReader m r a -> ManyReader m r b -> ManyReader m r c #

(*>) :: ManyReader m r a -> ManyReader m r b -> ManyReader m r b #

(<*) :: ManyReader m r a -> ManyReader m r b -> ManyReader m r a #

Functor m => Functor (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

fmap :: (a -> b) -> ManyReader m r a -> ManyReader m r b #

(<$) :: a -> ManyReader m r b -> ManyReader m r a #

Monad m => Monad (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

(>>=) :: ManyReader m r a -> (a -> ManyReader m r b) -> ManyReader m r b #

(>>) :: ManyReader m r a -> ManyReader m r b -> ManyReader m r b #

return :: a -> ManyReader m r a #

MonadPlus m => MonadPlus (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

mzero :: ManyReader m r a #

mplus :: ManyReader m r a -> ManyReader m r a -> ManyReader m r a #

MonadFail m => MonadFail (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

fail :: String -> ManyReader m r a #

MonadFix m => MonadFix (ManyReader m r) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Methods

mfix :: (a -> ManyReader m r a) -> ManyReader m r a #

Generic (ManyReader m r a) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

Associated Types

type Rep (ManyReader m r a) 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type Rep (ManyReader m r a) = D1 ('MetaData "ManyReader" "Parameterized.Control.Monad.Trans.Reader" "parameterized-0.5.0.0-4cLjzvLNqgFEID3wSIvExK" 'True) (C1 ('MetaCons "ManyReader" 'PrefixI 'True) (S1 ('MetaSel ('Just "runManyReader") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ReaderT r m a))))

Methods

from :: ManyReader m r a -> Rep (ManyReader m r a) x #

to :: Rep (ManyReader m r a) x -> ManyReader m r a #

type PUnary (ManyReader m :: Type -> Type -> Type) (r :: Type) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type PUnary (ManyReader m :: Type -> Type -> Type) (r :: Type) = ManyReader m r
type Rep (ManyReader m r a) Source # 
Instance details

Defined in Parameterized.Control.Monad.Trans.Reader

type Rep (ManyReader m r a) = D1 ('MetaData "ManyReader" "Parameterized.Control.Monad.Trans.Reader" "parameterized-0.5.0.0-4cLjzvLNqgFEID3wSIvExK" 'True) (C1 ('MetaCons "ManyReader" 'PrefixI 'True) (S1 ('MetaSel ('Just "runManyReader") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ReaderT r m a))))