-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Extensible records and polymorphic variants. -- -- Parameterized/indexed monoids and monads using only a single parameter -- type variable. @package parameterized @version 0.1.0.0 module Parameterized.TypeLevel -- | Get the first type of a type level tuple This is useful for defining a -- newtype wrapper with a single "parameterized" type, around a type with -- many "parameterized" type variables. -- | Get the second type of a type level tuple -- | Get the third type of a type level tuple -- | Get the fourth type of a type level tuple -- | Get the fifth type of a type level tuple -- | Get the sixth type of a type level tuple -- | Get the seventh type of a type level tuple -- | Get the eigth type of a type level tuple -- | Get the nineth type of a type level tuple -- | Get the tenth type of a type level tuple module Parameterized.Data.Semigroup -- | Parameterized version of (<>) in Semigroup If used in -- conjunction with Empty, ie as a parameterized Monoid, then the -- instance should follow the following laws: * pmempty' -- pmappend' x = x * x pmappend' pempty' = -- x * x pmappend' (y pmappend' z) = (x -- pmappend' y) pmappend' z class PSemigroup (n :: k -> Type) (t :: k) (u :: k) (v :: k) | t u -> v pmappend :: PSemigroup n t u v => n t -> n u -> n v (&<>) :: (PSemigroup n t u v) => n t -> n u -> n v infixr 6 &<> module Parameterized.Data.Monoid -- | Parameterized version of mempty in Monoid. class PMempty (n :: k -> Type) (id :: k) pmempty :: PMempty n id => n id -- | Parameterized version of Monoid. type PMonoid n id t u v = (PMempty n id, PSemigroup n t u v) module Parameterized.Control.Applicative -- | Parameterized version of pure in Applicative An instance -- of this should create a parameterized unary type where the parameter -- is an identity in respect to papply class PPointed (m :: k -> Type -> Type) (id :: k) -- | lift a value. ppure :: PPointed m id => a -> m id a -- | Parameterized version of ap in Applicative NB. -- PPointed cannot be made a superclass because type variable -- id is not in scope. class (Functor (m t), Functor (m u), Functor (m v)) => PApplicative (m :: k -> Type -> Type) (t :: k) (u :: k) (v :: k) | t u -> v -- | Sequential application. papply :: PApplicative m t u v => m t (a -> b) -> m u a -> m v b -- | Sequential application. (&<*>) :: (PApplicative m t u v) => m t (a -> b) -> m u a -> m v b infixl 4 &<*> -- | Sequence actions, discarding the value of the first argument. (&*>) :: (PApplicative m t u v) => m t a -> m u b -> m v b infixl 4 &*> -- | Sequence actions, discarding the value of the second argument. (&<*) :: (PApplicative m t u v) => m t a -> m u b -> m v a infixl 4 &<* -- | Lift a function to actions. pliftA :: (Functor (m t)) => (a -> b) -> m t a -> m t b -- | Lift a binary function to actions. pliftA2 :: (PApplicative m t u v) => (a -> b -> c) -> m t a -> m u b -> m v c -- | Lift a ternary function to actions. pliftA3 :: (PApplicative m t u v, PApplicative m v w x) => (a -> b -> c -> d) -> m t a -> m u b -> m w c -> m x d -- | Parameterized version of empty in Alternative. An instance of -- this should create a parameterized unary type where the parameter is -- an identity in respect to pappend class PEmpty (m :: k -> Type -> Type) (id :: k) -- | The identity of &<|> pempty :: PEmpty m id => m id a -- | Parameterized version of Alternative NB. PEmpty cannot -- be made a superclass because type variable id will be -- ambiguous. NB. PAlternative doensn't require PApplicative as a -- superclass, because Some things can be made instances of -- PAlternative but not PApplicative. class PAlternative (m :: k -> Type -> Type) (t :: k) (u :: k) (v :: k) | t u -> v -- | An associative binary operation pappend :: PAlternative m t u v => m t a -> m u a -> m v a (&<|>) :: (PAlternative m t u v) => m t a -> m u a -> m v a infixl 3 &<|> module Parameterized.Control.Monad -- | Parameterized version of Monad. class PApplicative m t u v => PMonad (m :: k -> Type -> Type) (t :: k) (u :: k) (v :: k) -- | Sequentially compose two actions, passing any value produced by the -- first as an argument to the second. pbind :: PMonad m t u v => m t a -> (a -> m u b) -> m v b -- | Sequentially compose two actions, passing any value produced by the -- first as an argument to the second. (&>>=) :: PMonad m t u v => m t a -> (a -> m u b) -> m v b infixl 1 &>>= (&>>) :: PMonad m t u v => m t a -> m u b -> m v b infixl 1 &>> -- | Same as &>>=, but with the arguments interchanged. (&=<<) :: PMonad m t u v => (a -> m u b) -> m t a -> m v b infixr 1 &=<< -- | Left-to-right Kleisli composition of monads. (&>=>) :: (PMonad m t u v) => (a -> m t b) -> (b -> m u c) -> (a -> m v c) infixr 1 &>=> -- | Right-to-left Kleisli composition of monads. -- (>=>), with the arguments flipped. (&<=<) :: (PMonad m t u v) => (b -> m u c) -> (a -> m t b) -> (a -> m v c) infixr 1 &<=< module Parameterized.Control.Monad.Trans.Reader -- | 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. newtype OverlappingWhichReader m r a OverlappingWhichReader :: ReaderT r m a -> OverlappingWhichReader m r a [runOverlappingWhichReader] :: OverlappingWhichReader m r a -> ReaderT r m a -- | 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 newtype DistinctWhichReader m r a DistinctWhichReader :: ReaderT r m a -> DistinctWhichReader m r a [runDistinctWhichReader] :: DistinctWhichReader m r a -> ReaderT r m a -- | 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. newtype ManyReader m r a ManyReader :: ReaderT r m a -> ManyReader m r a [runManyReader] :: ManyReader m r a -> ReaderT r m a instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance Control.Monad.Fail.MonadFail m => Control.Monad.Fail.MonadFail (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance Control.Monad.Zip.MonadZip m => Control.Monad.Zip.MonadZip (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance GHC.Base.Alternative m => GHC.Base.Alternative (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance GHC.Base.Monad m => GHC.Base.Monad (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance GHC.Base.Applicative m => GHC.Base.Applicative (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance GHC.Base.Functor m => GHC.Base.Functor (Parameterized.Control.Monad.Trans.Reader.ManyReader m r) instance GHC.Generics.Generic (Parameterized.Control.Monad.Trans.Reader.ManyReader m r a) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance Control.Monad.Fail.MonadFail m => Control.Monad.Fail.MonadFail (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance Control.Monad.Zip.MonadZip m => Control.Monad.Zip.MonadZip (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance GHC.Base.Alternative m => GHC.Base.Alternative (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance GHC.Base.Monad m => GHC.Base.Monad (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance GHC.Base.Applicative m => GHC.Base.Applicative (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance GHC.Base.Functor m => GHC.Base.Functor (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r) instance GHC.Generics.Generic (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m r a) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance Control.Monad.Fail.MonadFail m => Control.Monad.Fail.MonadFail (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance Control.Monad.Zip.MonadZip m => Control.Monad.Zip.MonadZip (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance GHC.Base.Alternative m => GHC.Base.Alternative (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance GHC.Base.Monad m => GHC.Base.Monad (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance GHC.Base.Applicative m => GHC.Base.Applicative (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance GHC.Base.Functor m => GHC.Base.Functor (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r) instance GHC.Generics.Generic (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m r a) instance GHC.Base.Applicative m => Parameterized.Control.Applicative.PPointed (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m) (Data.Diverse.Which.Internal.Which '[]) instance GHC.Base.Alternative m => Parameterized.Control.Applicative.PEmpty (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m) (Data.Diverse.Which.Internal.Which '[]) instance (GHC.Base.Alternative m, Data.Diverse.Which.Internal.Reinterpret b c, Data.Diverse.Which.Internal.Reinterpret a c, c ~ Data.Diverse.TypeLevel.AppendUnique a b) => Parameterized.Control.Applicative.PAlternative (Parameterized.Control.Monad.Trans.Reader.OverlappingWhichReader m) (Data.Diverse.Which.Internal.Which a) (Data.Diverse.Which.Internal.Which b) (Data.Diverse.Which.Internal.Which c) instance GHC.Base.Applicative m => Parameterized.Control.Applicative.PPointed (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m) (Data.Diverse.Which.Internal.Which '[]) instance GHC.Base.Alternative m => Parameterized.Control.Applicative.PEmpty (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m) (Data.Diverse.Which.Internal.Which '[]) instance (Data.Diverse.Which.Internal.Reinterpret b c, Data.Diverse.TypeLevel.Complement c b ~ a, Data.Diverse.TypeLevel.Complement c a ~ b, c ~ Data.Diverse.TypeLevel.Append a b) => Parameterized.Control.Applicative.PAlternative (Parameterized.Control.Monad.Trans.Reader.DistinctWhichReader m) (Data.Diverse.Which.Internal.Which a) (Data.Diverse.Which.Internal.Which b) (Data.Diverse.Which.Internal.Which c) instance GHC.Base.Applicative m => Parameterized.Control.Applicative.PPointed (Parameterized.Control.Monad.Trans.Reader.ManyReader m) (Data.Diverse.Many.Internal.Many '[]) instance GHC.Base.Alternative m => Parameterized.Control.Applicative.PEmpty (Parameterized.Control.Monad.Trans.Reader.ManyReader m) (Data.Diverse.Many.Internal.Many '[]) instance (GHC.Base.Functor (Parameterized.Control.Monad.Trans.Reader.ManyReader m (Data.Diverse.Many.Internal.Many c)), GHC.Base.Applicative m, Data.Diverse.Many.Internal.Select a c, Data.Diverse.Many.Internal.Select b c, c ~ Data.Diverse.TypeLevel.AppendUnique a b) => Parameterized.Control.Applicative.PApplicative (Parameterized.Control.Monad.Trans.Reader.ManyReader m) (Data.Diverse.Many.Internal.Many a) (Data.Diverse.Many.Internal.Many b) (Data.Diverse.Many.Internal.Many c) instance (GHC.Base.Functor (Parameterized.Control.Monad.Trans.Reader.ManyReader m (Data.Diverse.Many.Internal.Many c)), GHC.Base.Alternative m, Data.Diverse.Many.Internal.Select a c, Data.Diverse.Many.Internal.Select b c, c ~ Data.Diverse.TypeLevel.AppendUnique a b) => Parameterized.Control.Applicative.PAlternative (Parameterized.Control.Monad.Trans.Reader.ManyReader m) (Data.Diverse.Many.Internal.Many a) (Data.Diverse.Many.Internal.Many b) (Data.Diverse.Many.Internal.Many c) instance (GHC.Base.Functor (Parameterized.Control.Monad.Trans.Reader.ManyReader m (Data.Diverse.Many.Internal.Many c)), GHC.Base.Monad m, Data.Diverse.Many.Internal.Select a c, Data.Diverse.Many.Internal.Select b c, c ~ Data.Diverse.TypeLevel.AppendUnique a b) => Parameterized.Control.Monad.PMonad (Parameterized.Control.Monad.Trans.Reader.ManyReader m) (Data.Diverse.Many.Internal.Many a) (Data.Diverse.Many.Internal.Many b) (Data.Diverse.Many.Internal.Many c) module Parameterized.Control.Monad.Trans.State.Strict -- | Given a ManyState that modifies Many a, and another ManyState -- that modifes Many b make a State that accepts Many -- (AppendUnique a b) with the compile time constraint that all the -- types in (AppendUnique a b) are distinct. newtype ManyState m s a ManyState :: StateT s m a -> ManyState m s a [runManyState] :: ManyState m s a -> StateT s m a -- | Given a ChangingState that changes state from s to -- t, and another ChangingState that changes state from -- t to u make a State that changes from s to -- u with the compile time constraint that all the types in -- (AppendUnique a b) are distinct. newtype ChangingState m st a ChangingState :: (At0 st -> m (a, At1 st)) -> ChangingState m st a [runChangingState] :: ChangingState m st a -> At0 st -> m (a, At1 st) instance GHC.Generics.Generic (Parameterized.Control.Monad.Trans.State.Strict.ChangingState m st a) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s) instance Control.Monad.Fail.MonadFail m => Control.Monad.Fail.MonadFail (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s) instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s) instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s) instance GHC.Base.MonadPlus m => GHC.Base.Alternative (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s) instance GHC.Base.Monad m => GHC.Base.Monad (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s) instance GHC.Base.Monad m => GHC.Base.Applicative (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s) instance GHC.Base.Functor m => GHC.Base.Functor (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s) instance GHC.Generics.Generic (Parameterized.Control.Monad.Trans.State.Strict.ManyState m s a) instance GHC.Base.Monad m => Parameterized.Control.Applicative.PPointed (Parameterized.Control.Monad.Trans.State.Strict.ManyState m) (Data.Diverse.Many.Internal.Many '[]) instance GHC.Base.Alternative m => Parameterized.Control.Applicative.PEmpty (Parameterized.Control.Monad.Trans.State.Strict.ManyState m) (Data.Diverse.Many.Internal.Many '[]) instance (GHC.Base.Monad m, Data.Diverse.Many.Internal.Select a c, Data.Diverse.Many.Internal.Select b c, Data.Diverse.Many.Internal.Amend a c, Data.Diverse.Many.Internal.Amend b c, c ~ Data.Diverse.TypeLevel.AppendUnique a b) => Parameterized.Control.Applicative.PApplicative (Parameterized.Control.Monad.Trans.State.Strict.ManyState m) (Data.Diverse.Many.Internal.Many a) (Data.Diverse.Many.Internal.Many b) (Data.Diverse.Many.Internal.Many c) instance (GHC.Base.Monad m, GHC.Base.Alternative m, Data.Diverse.Many.Internal.Select a c, Data.Diverse.Many.Internal.Select b c, Data.Diverse.Many.Internal.Amend a c, Data.Diverse.Many.Internal.Amend b c, c ~ Data.Diverse.TypeLevel.AppendUnique a b) => Parameterized.Control.Applicative.PAlternative (Parameterized.Control.Monad.Trans.State.Strict.ManyState m) (Data.Diverse.Many.Internal.Many a) (Data.Diverse.Many.Internal.Many b) (Data.Diverse.Many.Internal.Many c) instance (GHC.Base.Monad m, Data.Diverse.Many.Internal.Select a c, Data.Diverse.Many.Internal.Select b c, Data.Diverse.Many.Internal.Amend a c, Data.Diverse.Many.Internal.Amend b c, c ~ Data.Diverse.TypeLevel.AppendUnique a b) => Parameterized.Control.Monad.PMonad (Parameterized.Control.Monad.Trans.State.Strict.ManyState m) (Data.Diverse.Many.Internal.Many a) (Data.Diverse.Many.Internal.Many b) (Data.Diverse.Many.Internal.Many c) instance GHC.Base.Functor m => GHC.Base.Functor (Parameterized.Control.Monad.Trans.State.Strict.ChangingState m st) instance GHC.Base.Applicative m => Parameterized.Control.Applicative.PPointed (Parameterized.Control.Monad.Trans.State.Strict.ChangingState m) (s, s) instance GHC.Base.Monad m => Parameterized.Control.Applicative.PApplicative (Parameterized.Control.Monad.Trans.State.Strict.ChangingState m) (s, t) (t, u) (s, u) instance GHC.Base.Monad m => Parameterized.Control.Monad.PMonad (Parameterized.Control.Monad.Trans.State.Strict.ChangingState m) (s, t) (t, u) (s, u)