Copyright | (c) 2013 Justus Sagemüller |
---|---|
License | GPL v3 (see COPYING) |
Maintainer | (@) sagemueller $ geo.uni-koeln.de |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Control.Monad.Constrained
Description
- module Control.Applicative.Constrained
- class (Applicative m k k, Object k (m (UnitObject k)), Object k (m (m (UnitObject k)))) => Monad m k where
- return :: Monad m (->) => a -> m a
- (>>=) :: (Function f, Monad m f, Object f a, Object f b, Object f (m a), Object f (m b), Object f (m (m b))) => m a -> f a (m b) -> m b
- (=<<) :: (Monad m k, Object k a, Object k b, Object k (m a), Object k (m b), Object k (m (m b))) => k a (m b) -> k (m a) (m b)
- (>>) :: (WellPointed k, Monad m k, ObjectPair k b (UnitObject k), ObjectPair k (m b) (UnitObject k), ObjectPair k (UnitObject k) (m b), ObjectPair k b a, ObjectPair k a b, Object k (m (a, b)), ObjectPair k (m a) (m b), ObjectPoint k (m a)) => m a -> k (m b) (m b)
- (<<) :: (Monad m k, WellPointed k, Object k a, Object k b, Object k (m a), ObjectPoint k (m b), Object k (m (m b))) => m b -> k (m a) (m b)
- (>=>) :: (Monad m k, Object k a, Object k b, Object k c, Object k (m b), Object k (m c), Object k (m (m c))) => (a `k` m b) -> (b `k` m c) -> a `k` m c
- (<=<) :: (Monad m k, Object k a, Object k b, Object k c, Object k (m b), Object k (m c), Object k (m (m c))) => (b `k` m c) -> (a `k` m b) -> a `k` m c
- newtype Kleisli m k a b = Kleisli {
- runKleisli :: k a (m b)
- class Monad m k => MonadZero m k where
- fmzero :: (Object k a, Object k (m a)) => UnitObject k `k` m a
- mzero :: MonadZero m (->) => m a
- class MonadZero m k => MonadPlus m k where
- fmplus :: ObjectPair k (m a) (m a) => k (m a, m a) (m a)
- mplus :: MonadPlus m (->) => m a -> m a -> m a
- class MonadPlus m k => MonadFail m k where
- mapM :: (Traversable t t k k, Monoidal m k k, Object k a, Object k (t a), ObjectPair k b (t b), ObjectPair k (m b) (m (t b)), ObjectPoint k (t b)) => (a `k` m b) -> t a `k` m (t b)
- mapM_ :: forall t k o f a b u. (Foldable t k k, WellPointed k, Monoidal f k k, u ~ UnitObject k, ObjectPair k (f u) (t a), ObjectPair k (f u) a, ObjectPair k u (t a), ObjectPair k (t a) u, ObjectPair k (f u) (f u), ObjectPair k u u, ObjectPair k b u, Object k (f b)) => (a `k` f b) -> t a `k` f u
- forM :: forall s t k m a b l. (Traversable s t k l, Monoidal m k l, Function l, Object k b, Object k (t b), ObjectPair k b (t b), Object l a, Object l (s a), ObjectPair l (m b) (m (t b)), ObjectPoint k (t b)) => s a -> (a `l` m b) -> m (t b)
- forM_ :: forall t k l f a b uk ul. (Foldable t k l, Monoidal f l l, Monoidal f k k, Function l, Arrow k (->), Arrow l (->), ul ~ UnitObject l, uk ~ UnitObject k, uk ~ ul, ObjectPair l ul ul, ObjectPair l (f ul) (f ul), ObjectPair l (f ul) (t a), ObjectPair l ul (t a), ObjectPair l (t a) ul, ObjectPair l (f ul) a, ObjectPair k b (f b), ObjectPair k b ul, ObjectPair k uk uk, ObjectPair k (f uk) a, ObjectPair k (f uk) (f uk)) => t a -> (a `k` f b) -> f uk
- sequence :: (Traversable t t k k, Monoidal f k k, ObjectPair k a (t a), ObjectPair k (f a) (f (t a)), Object k (t (f a)), ObjectPoint k (t a)) => t (f a) `k` f (t a)
- sequence_ :: forall t k l m a b uk ul. (Foldable t k l, Arrow k (->), Arrow l (->), uk ~ UnitObject k, ul ~ UnitObject l, uk ~ ul, Monoidal m k k, Monoidal m l l, ObjectPair k a uk, ObjectPair k (t (m a)) uk, ObjectPair k uk uk, ObjectPair k (m uk) (m uk), ObjectPair k (t (m a)) ul, ObjectPair l (m ul) (t (m a)), ObjectPair l ul (t (m a)), ObjectPair l (m uk) (t (m a)), ObjectPair l (t (m a)) ul, ObjectPair k (m uk) (m a)) => t (m a) `l` m uk
- guard :: (MonadPlus m k, Arrow k (->), Function k, UnitObject k ~ (), Object k Bool) => Bool `k` m ()
- when :: (Monad m k, PreArrow k, u ~ UnitObject k, ObjectPair k (m u) u) => Bool -> m u `k` m u
- unless :: (Monad m k, PreArrow k, u ~ UnitObject k, ObjectPair k (m u) u) => Bool -> m u `k` m u
- forever :: (Monad m k, Function k, Arrow k (->), Object k a, Object k b, Object k (m a), Object k (m (m a)), ObjectPoint k (m b), Object k (m (m b))) => m a `k` m b
- void :: (Monad m k, PreArrow k, Object k a, Object k (m a), ObjectPair k a u, u ~ UnitObject k) => m a `k` m (UnitObject k)
Documentation
Monads
class (Applicative m k k, Object k (m (UnitObject k)), Object k (m (m (UnitObject k)))) => Monad m k where Source
Instances
(Applicative m, Monad m) => Monad m (->) |
return :: Monad m (->) => a -> m a Source
This is monomorphic in the category Hask, thus exactly the same as return
from the standard prelude. This allows writing expressions like
, which would always be ambiguous with the more general
signature return
$
case x of ...Monad m k => k a (m a)
.
Use pure
when you want to "return" in categories other than (->)
; this always
works since Applicative
is a superclass of Monad
.
(>>=) :: (Function f, Monad m f, Object f a, Object f b, Object f (m a), Object f (m b), Object f (m (m b))) => m a -> f a (m b) -> m b infixl 1 Source
(=<<) :: (Monad m k, Object k a, Object k b, Object k (m a), Object k (m b), Object k (m (m b))) => k a (m b) -> k (m a) (m b) infixr 1 Source
(>>) :: (WellPointed k, Monad m k, ObjectPair k b (UnitObject k), ObjectPair k (m b) (UnitObject k), ObjectPair k (UnitObject k) (m b), ObjectPair k b a, ObjectPair k a b, Object k (m (a, b)), ObjectPair k (m a) (m b), ObjectPoint k (m a)) => m a -> k (m b) (m b) infixl 1 Source
(<<) :: (Monad m k, WellPointed k, Object k a, Object k b, Object k (m a), ObjectPoint k (m b), Object k (m (m b))) => m b -> k (m a) (m b) infixr 1 Source
Kleisli arrows
(>=>) :: (Monad m k, Object k a, Object k b, Object k c, Object k (m b), Object k (m c), Object k (m (m c))) => (a `k` m b) -> (b `k` m c) -> a `k` m c infixr 1 Source
(<=<) :: (Monad m k, Object k a, Object k b, Object k c, Object k (m b), Object k (m c), Object k (m (m c))) => (b `k` m c) -> (a `k` m b) -> a `k` m c infixr 1 Source
newtype Kleisli m k a b Source
Constructors
Kleisli | |
Fields
|
Instances
(Monad m a, Arrow a (->), Function a) => Curry (Kleisli m a) | |
(Monad m k, CoCartesian k, Object k (m (ZeroObject k)), Object k (m (m (ZeroObject k)))) => CoCartesian (Kleisli m k) | |
(Monad m a, Cartesian a) => Cartesian (Kleisli m a) | |
Monad m k => Category (Kleisli m k) | |
(Monad m a, WellPointed a, ObjectPoint a (m (UnitObject a))) => WellPointed (Kleisli m a) | |
(SPDistribute k, Monad m k, PreArrow (Kleisli m k), PreArrChoice (Kleisli m k)) => SPDistribute (Kleisli m k) | |
(Monad m k, Arrow k (->), Function k, PreArrChoice k, Object k (m (ZeroObject k)), Object k (m (m (ZeroObject k)))) => PreArrChoice (Kleisli m k) | |
(Monad m a, PreArrow a, Curry a) => PreArrow (Kleisli m a) | |
(Monad m k, Arrow k (->), Function k, PreArrChoice k, Object k (m (ZeroObject k)), Object k (m (m (ZeroObject k)))) => MorphChoice (Kleisli m k) | Hask-Kleislis inherit more or less trivially |
(Monad m a, Morphism a, Curry a) => Morphism (Kleisli m a) | |
(Monad m a, Arrow a q, Cartesian a) => EnhancedCat (Kleisli m a) q | |
type ZeroObject (Kleisli m k) = ZeroObject k | |
type UnitObject (Kleisli m a) = UnitObject a | |
type Object (Kleisli m k) o = (Object k o, Object k (m o), Object k (m (m o))) | |
type PointObject (Kleisli m a) b = (PointObject a b, PointObject a (m b)) | |
type MorphObjects (Kleisli m a) c d = (Object a (Kleisli m a c d), Object a (m (Kleisli m a c d)), Object a (a c (m d)), ObjectMorphism a c d, ObjectMorphism a c (m d), ObjectMorphism a c (m (m d))) | |
type SumObjects (Kleisli m k) b c = (ObjectSum k b c, ObjectSum k (m b) c, ObjectSum k b (m c), ObjectSum k (m b) (m c)) | |
type PairObjects (Kleisli m a) b c = (ObjectPair a b c, ObjectPair a (m b) c, ObjectPair a b (m c), ObjectPair a (m b) (m c)) |
Monoid-Monads
class Monad m k => MonadZero m k where Source
MonadPlus
cannot be adapted quite analogously to Monad
,
since mzero
is just a value with no way to indicate its morphism
category. The current implementation is probably not ideal, mainly
written to give MonadFail
(fail
being needed for RebindableSyntax
-do
notation) a mathematically reasonable superclass.
Consider these classes provisorial, avoid relying on them explicitly.
Methods
fmzero :: (Object k a, Object k (m a)) => UnitObject k `k` m a Source
Instances
(MonadPlus m, Applicative m) => MonadZero m (->) |
class MonadZero m k => MonadPlus m k where Source
Methods
fmplus :: ObjectPair k (m a) (m a) => k (m a, m a) (m a) Source
Instances
(MonadPlus m, Applicative m) => MonadPlus m (->) |
class MonadPlus m k => MonadFail m k where Source
Instances
(MonadPlus m, Applicative m) => MonadFail m (->) |
Utility
mapM :: (Traversable t t k k, Monoidal m k k, Object k a, Object k (t a), ObjectPair k b (t b), ObjectPair k (m b) (m (t b)), ObjectPoint k (t b)) => (a `k` m b) -> t a `k` m (t b) Source
traverse
, restricted to endofunctors.
mapM_ :: forall t k o f a b u. (Foldable t k k, WellPointed k, Monoidal f k k, u ~ UnitObject k, ObjectPair k (f u) (t a), ObjectPair k (f u) a, ObjectPair k u (t a), ObjectPair k (t a) u, ObjectPair k (f u) (f u), ObjectPair k u u, ObjectPair k b u, Object k (f b)) => (a `k` f b) -> t a `k` f u Source
The distinction between mapM_
and traverse_
doesn't really make sense
on grounds of Monoidal
/ Applicative
vs Monad
, but it has in fact some
benefits to restrict this to endofunctors, to make the constraint list
at least somewhat shorter.
forM :: forall s t k m a b l. (Traversable s t k l, Monoidal m k l, Function l, Object k b, Object k (t b), ObjectPair k b (t b), Object l a, Object l (s a), ObjectPair l (m b) (m (t b)), ObjectPoint k (t b)) => s a -> (a `l` m b) -> m (t b) Source
forM_ :: forall t k l f a b uk ul. (Foldable t k l, Monoidal f l l, Monoidal f k k, Function l, Arrow k (->), Arrow l (->), ul ~ UnitObject l, uk ~ UnitObject k, uk ~ ul, ObjectPair l ul ul, ObjectPair l (f ul) (f ul), ObjectPair l (f ul) (t a), ObjectPair l ul (t a), ObjectPair l (t a) ul, ObjectPair l (f ul) a, ObjectPair k b (f b), ObjectPair k b ul, ObjectPair k uk uk, ObjectPair k (f uk) a, ObjectPair k (f uk) (f uk)) => t a -> (a `k` f b) -> f uk Source
sequence :: (Traversable t t k k, Monoidal f k k, ObjectPair k a (t a), ObjectPair k (f a) (f (t a)), Object k (t (f a)), ObjectPoint k (t a)) => t (f a) `k` f (t a) Source
sequence_ :: forall t k l m a b uk ul. (Foldable t k l, Arrow k (->), Arrow l (->), uk ~ UnitObject k, ul ~ UnitObject l, uk ~ ul, Monoidal m k k, Monoidal m l l, ObjectPair k a uk, ObjectPair k (t (m a)) uk, ObjectPair k uk uk, ObjectPair k (m uk) (m uk), ObjectPair k (t (m a)) ul, ObjectPair l (m ul) (t (m a)), ObjectPair l ul (t (m a)), ObjectPair l (m uk) (t (m a)), ObjectPair l (t (m a)) ul, ObjectPair k (m uk) (m a)) => t (m a) `l` m uk Source
guard :: (MonadPlus m k, Arrow k (->), Function k, UnitObject k ~ (), Object k Bool) => Bool `k` m () Source
when :: (Monad m k, PreArrow k, u ~ UnitObject k, ObjectPair k (m u) u) => Bool -> m u `k` m u Source
unless :: (Monad m k, PreArrow k, u ~ UnitObject k, ObjectPair k (m u) u) => Bool -> m u `k` m u Source
forever :: (Monad m k, Function k, Arrow k (->), Object k a, Object k b, Object k (m a), Object k (m (m a)), ObjectPoint k (m b), Object k (m (m b))) => m a `k` m b Source
void :: (Monad m k, PreArrow k, Object k a, Object k (m a), ObjectPair k a u, u ~ UnitObject k) => m a `k` m (UnitObject k) Source