-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Parameterized/indexed monoids and monads using only a single parameter type variable.
--
-- Parameterized/indexed monoids and monads using only a single parameter
-- type variable.
@package parameterized
@version 0.4.0.0
module Parameterized.TypeLevel
-- | Get the first type of a value 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 value level tuple
-- | Get the third type of a value level tuple
-- | Get the fourth type of a value level tuple
-- | Get the fifth type of a value level tuple
-- | Get the sixth type of a value level tuple
-- | Get the seventh type of a value level tuple
-- | Get the eigth type of a value level tuple
-- | Get the nineth type of a value level tuple
-- | Get the tenth type of a value 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 => PNullary n t -> PNullary n u -> PNullary n v
(&<>) :: (PSemigroup n t u v) => PNullary n t -> PNullary n u -> PNullary n v
infixr 6 &<>
module Parameterized.Data.Monoid
-- | Parameterized version of mempty in Monoid.
class PMEmpty (n :: k -> Type) (id :: k) | n -> id
pmempty :: PMEmpty n id => PNullary n id
-- | Parameterized version of Monoid.
class (PSemigroup n t u v, PMEmpty n id) => PMonoid n id t u v
instance forall k (n :: k -> GHC.Types.Type) (t :: k) (u :: k) (v :: k) (id :: k). (Parameterized.Data.Semigroup.PSemigroup n t u v, Parameterized.Data.Monoid.PMEmpty n id) => Parameterized.Data.Monoid.PMonoid n id 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 NB. For
-- ChangingState, the id s "parameter" cannot be purely
-- determined from m, so unlike pappend there is not
-- functional dependency to help type inference. Hint: use ppure @_
-- @_ id@ to specify the id type to avoid ambiguity.
class PPointed (m :: k -> Type -> Type) (id :: k)
-- | lift a value.
ppure :: PPointed m id => a -> PUnary 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 (PUnary m t), Functor (PUnary m u), Functor (PUnary m v)) => PApplicative (m :: k -> Type -> Type) (t :: k) (u :: k) (v :: k) | t u -> v
-- | Sequential application.
papply :: PApplicative m t u v => PUnary m t (a -> b) -> PUnary m u a -> PUnary m v b
-- | Sequential application.
(&<*>) :: (PApplicative m t u v) => PUnary m t (a -> b) -> PUnary m u a -> PUnary m v b
infixl 4 &<*>
-- | Sequence actions, discarding the value of the first argument.
(&*>) :: (PApplicative m t u v) => PUnary m t a -> PUnary m u b -> PUnary m v b
infixl 4 &*>
-- | Sequence actions, discarding the value of the second argument.
(&<*) :: (PApplicative m t u v) => PUnary m t a -> PUnary m u b -> PUnary m v a
infixl 4 &<*
-- | Lift a function to actions.
pliftA :: (Functor (PUnary m t)) => (a -> b) -> PUnary m t a -> PUnary m t b
-- | Lift a binary function to actions.
pliftA2 :: (PApplicative m t u v) => (a -> b -> c) -> PUnary m t a -> PUnary m u b -> PUnary m v c
-- | Lift a ternary function to actions.
pliftA3 :: (PApplicative m t u v, PApplicative m v w x) => (a -> b -> c -> d) -> PUnary m t a -> PUnary m u b -> PUnary m w c -> PUnary 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) | m -> id
-- | The identity of &<|>
pempty :: PEmpty m id => PUnary 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 => PUnary m t a -> PUnary m u a -> PUnary m v a
(&<|>) :: (PAlternative m t u v) => PUnary m t a -> PUnary m u a -> PUnary 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 => PUnary m t a -> (a -> PUnary m u b) -> PUnary 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 => PUnary m t a -> (a -> PUnary m u b) -> PUnary m v b
infixl 1 &>>=
(&>>) :: PMonad m t u v => PUnary m t a -> PUnary m u b -> PUnary m v b
infixl 1 &>>
-- | Same as &>>=, but with the arguments interchanged.
(&=<<) :: PMonad m t u v => (a -> PUnary m u b) -> PUnary m t a -> PUnary m v b
infixr 1 &=<<
-- | Left-to-right Kleisli composition of monads.
(&>=>) :: (PMonad m t u v) => (a -> PUnary m t b) -> (b -> PUnary m u c) -> (a -> PUnary m v c)
infixr 1 &>=>
-- | Right-to-left Kleisli composition of monads.
-- (>=>), with the arguments flipped.
(&<=<) :: (PMonad m t u v) => (b -> PUnary m u c) -> (a -> PUnary m t b) -> (a -> PUnary 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 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)
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.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. NB. The state is in the snd position
-- to be consistent with StateT.
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)
-- | Prefer this to using ChangingState to construct as it results in
-- better type inference as it avoids ambiguous type variable st
changingState :: (s -> m (a, t)) -> ChangingState m (s, t) a
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)