Safe Haskell | None |
---|---|
Language | Haskell2010 |
Operations on sums, combining effects into a signature.
Since: 0.1.0.0
Membership
class Member (sub :: (* -> *) -> * -> *) sup where Source #
The class of types present in a signature.
This is based on Wouter Swierstra’s design described in Data types à la carte. As described therein, overlapping instances are required in order to distinguish e.g. left-occurrence from right-recursion.
It should not generally be necessary for you to define new Member
instances, but these are not specifically prohibited if you wish to get creative.
Since: 0.1.0.0
Instances
Member t t Source # | Reflexivity: |
Member l r => Member l (l' :+: r) Source # | Right-recursion: if |
Member l (l :+: r) Source # | Left-occurrence: if |
Member t (l1 :+: (l2 :+: r)) => Member t ((l1 :+: l2) :+: r) Source # | Left-recursion: if |
type family Members sub sup :: Constraint where ... Source #
Decompose sums on the left into multiple Member
constraints.
Note that while this, and by extension Has
, can be used to group together multiple membership checks into a single (composite) constraint, large signatures on the left can slow compiles down due to a problem with recursive type families.
Since: 1.0.0.0
Sums
data (f :+: g) (m :: * -> *) k infixr 4 Source #
Higher-order sums are used to combine multiple effects into a signature, typically by chaining on the right.
Instances
Algebra NonDet [] Source # | |
Defined in Control.Algebra | |
LabelledMember label l r => LabelledMember (label :: k) l (l' :+: r) Source # | Right-recursion: if |
Defined in Control.Effect.Labelled | |
LabelledMember (label :: k) l (Labelled label l :+: r) Source # | Left-occurrence: if |
Defined in Control.Effect.Labelled | |
LabelledMember label t (l1 :+: (l2 :+: r)) => LabelledMember (label :: k) t ((l1 :+: l2) :+: r) Source # | Left-recursion: if |
Defined in Control.Effect.Labelled | |
Member l r => Member l (l' :+: r) Source # | Right-recursion: if |
Member l (l :+: r) Source # | Left-occurrence: if |
Member t (l1 :+: (l2 :+: r)) => Member t ((l1 :+: l2) :+: r) Source # | Left-recursion: if |
Algebra (Error e) (Either e) Source # | |
Generic1 ((f :+: g) m :: Type -> Type) Source # | |
(Effect f, Effect g) => Effect (f :+: g) Source # | |
(HFunctor f, HFunctor g) => HFunctor (f :+: g) Source # | |
(Algebra sig m, Effect sig) => Algebra (Choose :+: sig) (ChooseC m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Empty :+: sig) (EmptyC m) Source # | |
(Algebra sig m, Effect sig) => Algebra (NonDet :+: sig) (NonDetC m) Source # | |
(MonadIO m, Algebra sig m) => Algebra (Trace :+: sig) (TraceC m) Source # | |
Algebra sig m => Algebra (Trace :+: sig) (TraceC m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Trace :+: sig) (TraceC m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Fail :+: sig) (FailC m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Fresh :+: sig) (FreshC m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Cut :+: (NonDet :+: sig)) (CutC m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Cull :+: (NonDet :+: sig)) (CullC m) Source # | |
Algebra sig m => Algebra (Reader r :+: sig) (ReaderT r m) Source # | |
Algebra sig m => Algebra (Reader r :+: sig) (ReaderC r m) Source # | |
(Algebra sig m, Effect sig) => Algebra (State s :+: sig) (StateT s m) Source # | |
(Algebra sig m, Effect sig) => Algebra (State s :+: sig) (StateT s m) Source # | |
(Algebra sig m, Effect sig) => Algebra (State s :+: sig) (StateC s m) Source # | |
(Algebra sig m, Effect sig) => Algebra (State s :+: sig) (StateC s m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Throw e :+: sig) (ThrowC e m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Error e :+: sig) (ExceptT e m) Source # | |
(Algebra sig m, Effect sig) => Algebra (Error e :+: sig) (ErrorC e m) Source # | |
(Algebra sig m, Effect sig, Monoid w) => Algebra (Writer w :+: sig) (WriterT w m) Source # | |
(Algebra sig m, Effect sig, Monoid w) => Algebra (Writer w :+: sig) (WriterT w m) Source # | |
(Monoid w, Algebra sig m, Effect sig) => Algebra (Writer w :+: sig) (WriterC w m) Source # | |
(HFunctor eff, HFunctor sig, Reifies s (Handler eff m), Monad m, Algebra sig m) => Algebra (eff :+: sig) (InterpretC s eff m) Source # | |
Defined in Control.Carrier.Interpret alg :: (eff :+: sig) (InterpretC s eff m) a -> InterpretC s eff m a Source # | |
(LabelledMember label sub sig, HFunctor sub, Algebra sig m) => Algebra (sub :+: sig) (UnderLabel label sub m) Source # | |
Defined in Control.Effect.Labelled alg :: (sub :+: sig) (UnderLabel label sub m) a -> UnderLabel label sub m a Source # | |
(Algebra sig m, Effect sig, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m) Source # | |
(Algebra sig m, Effect sig, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m) Source # | |
(Algebra (eff :+: sig) (sub m), HFunctor eff, HFunctor sig) => Algebra (Labelled label eff :+: sig) (Labelled label sub m) Source # | |
(Functor (f m), Functor (g m)) => Functor ((f :+: g) m) Source # | |
(Foldable (f m), Foldable (g m)) => Foldable ((f :+: g) m) Source # | |
Defined in Control.Effect.Sum fold :: Monoid m0 => (f :+: g) m m0 -> m0 # foldMap :: Monoid m0 => (a -> m0) -> (f :+: g) m a -> m0 # foldMap' :: Monoid m0 => (a -> m0) -> (f :+: g) m a -> m0 # foldr :: (a -> b -> b) -> b -> (f :+: g) m a -> b # foldr' :: (a -> b -> b) -> b -> (f :+: g) m a -> b # foldl :: (b -> a -> b) -> b -> (f :+: g) m a -> b # foldl' :: (b -> a -> b) -> b -> (f :+: g) m a -> b # foldr1 :: (a -> a -> a) -> (f :+: g) m a -> a # foldl1 :: (a -> a -> a) -> (f :+: g) m a -> a # toList :: (f :+: g) m a -> [a] # null :: (f :+: g) m a -> Bool # length :: (f :+: g) m a -> Int # elem :: Eq a => a -> (f :+: g) m a -> Bool # maximum :: Ord a => (f :+: g) m a -> a # minimum :: Ord a => (f :+: g) m a -> a # | |
(Traversable (f m), Traversable (g m)) => Traversable ((f :+: g) m) Source # | |
Defined in Control.Effect.Sum | |
(Eq (f m k), Eq (g m k)) => Eq ((f :+: g) m k) Source # | |
(Ord (f m k), Ord (g m k)) => Ord ((f :+: g) m k) Source # | |
Defined in Control.Effect.Sum compare :: (f :+: g) m k -> (f :+: g) m k -> Ordering # (<) :: (f :+: g) m k -> (f :+: g) m k -> Bool # (<=) :: (f :+: g) m k -> (f :+: g) m k -> Bool # (>) :: (f :+: g) m k -> (f :+: g) m k -> Bool # (>=) :: (f :+: g) m k -> (f :+: g) m k -> Bool # | |
(Show (f m k), Show (g m k)) => Show ((f :+: g) m k) Source # | |
type Rep1 ((f :+: g) m :: Type -> Type) Source # | |
Defined in Control.Effect.Sum type Rep1 ((f :+: g) m :: Type -> Type) = D1 ('MetaData ":+:" "Control.Effect.Sum" "fused-effects-1.0.2.0-inplace" 'False) (C1 ('MetaCons "L" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 (f m))) :+: C1 ('MetaCons "R" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 (g m)))) |