| Copyright | (C) 2024 Eitan Chatav |
|---|---|
| License | BSD 3-Clause License (see the file LICENSE) |
| Maintainer | Eitan Chatav <eitan.chatav@gmail.com> |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Control.Monad.Trans.Indexed
Description
Indexed monad transformers.
Synopsis
- class (forall i j m. Monad m => Functor (t i j m), forall i j m. (i ~ j, Monad m) => Monad (t i j m), forall i j. i ~ j => MonadTrans (t i j)) => IxMonadTrans t where
- apIx :: Monad m => t i j m (x -> y) -> t j k m x -> t i k m y
- joinIx :: Monad m => t i j m (t j k m y) -> t i k m y
- bindIx :: Monad m => (x -> t j k m y) -> t i j m x -> t i k m y
- thenIx :: Monad m => t j k m y -> t i j m x -> t i k m y
- andThenIx :: Monad m => (y -> t j k m z) -> (x -> t i j m y) -> x -> t i k m z
- newtype Indexed t m r i j = Indexed {
- runIndexed :: t i j m r
- (&) :: a -> (a -> b) -> b
Documentation
class (forall i j m. Monad m => Functor (t i j m), forall i j m. (i ~ j, Monad m) => Monad (t i j m), forall i j. i ~ j => MonadTrans (t i j)) => IxMonadTrans t where Source #
An Atkey indexed monad
is a Functor enriched category.
An indexed monad transformer transforms a Monad into an indexed monad.
It is a monad and monad transformer when its source and target index
are the same, enabling use of standard do notation in that case.
In the general case, qualified Indexed.do notation can be used,
even if the source and target index are different.
>>>:set -XQualifiedDo>>>import qualified Control.Monad.Trans.Indexed.Do as Indexed
Methods
apIx :: Monad m => t i j m (x -> y) -> t j k m x -> t i k m y Source #
indexed analog of <*>
(<*>) = apIx
joinIx :: Monad m => t i j m (t j k m y) -> t i k m y Source #
bindIx :: Monad m => (x -> t j k m y) -> t i j m x -> t i k m y Source #
indexed analog of =<<
(=<<) = bindIx
bindIx f x = joinIx (f <$> x)
x & bindIx return = x
x & bindIx f & bindIx g = x & bindIx (f & andThenIx g)
thenIx :: Monad m => t j k m y -> t i j m x -> t i k m y Source #
andThenIx :: Monad m => (y -> t j k m z) -> (x -> t i j m y) -> x -> t i k m z Source #
indexed analog of <=<
(<=<) = andThenIx
andThenIx g f x = bindIx g (f x)
f & andThenIx return = f
return & andThenIx f = f
f & andThenIx g & andThenIx h = f & andThenIx (g & andThenIx h)
Instances
| IxMonadTrans StateIx Source # | |
Defined in Control.Monad.Trans.Indexed.State Methods apIx :: forall (m :: Type -> Type) (i :: k) (j :: k) x y (k1 :: k). Monad m => StateIx i j m (x -> y) -> StateIx j k1 m x -> StateIx i k1 m y Source # joinIx :: forall (m :: Type -> Type) (i :: k) (j :: k) (k1 :: k) y. Monad m => StateIx i j m (StateIx j k1 m y) -> StateIx i k1 m y Source # bindIx :: forall (m :: Type -> Type) x (j :: k) (k1 :: k) y (i :: k). Monad m => (x -> StateIx j k1 m y) -> StateIx i j m x -> StateIx i k1 m y Source # thenIx :: forall (m :: Type -> Type) (j :: k) (k1 :: k) y (i :: k) x. Monad m => StateIx j k1 m y -> StateIx i j m x -> StateIx i k1 m y Source # andThenIx :: forall (m :: Type -> Type) y (j :: k) (k1 :: k) z x (i :: k). Monad m => (y -> StateIx j k1 m z) -> (x -> StateIx i j m y) -> x -> StateIx i k1 m z Source # | |
| IxMonadTrans (ContIx :: Type -> Type -> (Type -> Type) -> Type -> Type) Source # | |
Defined in Control.Monad.Trans.Indexed.Cont Methods apIx :: forall (m :: Type -> Type) (i :: k) (j :: k) x y (k1 :: k). Monad m => ContIx i j m (x -> y) -> ContIx j k1 m x -> ContIx i k1 m y Source # joinIx :: forall (m :: Type -> Type) (i :: k) (j :: k) (k1 :: k) y. Monad m => ContIx i j m (ContIx j k1 m y) -> ContIx i k1 m y Source # bindIx :: forall (m :: Type -> Type) x (j :: k) (k1 :: k) y (i :: k). Monad m => (x -> ContIx j k1 m y) -> ContIx i j m x -> ContIx i k1 m y Source # thenIx :: forall (m :: Type -> Type) (j :: k) (k1 :: k) y (i :: k) x. Monad m => ContIx j k1 m y -> ContIx i j m x -> ContIx i k1 m y Source # andThenIx :: forall (m :: Type -> Type) y (j :: k) (k1 :: k) z x (i :: k). Monad m => (y -> ContIx j k1 m z) -> (x -> ContIx i j m y) -> x -> ContIx i k1 m z Source # | |
| IxFunctor f => IxMonadTrans (FreeIx f :: k -> k -> (Type -> Type) -> Type -> Type) Source # | |
Defined in Control.Monad.Trans.Indexed.Free.Fold Methods apIx :: forall (m :: Type -> Type) (i :: k0) (j :: k0) x y (k1 :: k0). Monad m => FreeIx f i j m (x -> y) -> FreeIx f j k1 m x -> FreeIx f i k1 m y Source # joinIx :: forall (m :: Type -> Type) (i :: k0) (j :: k0) (k1 :: k0) y. Monad m => FreeIx f i j m (FreeIx f j k1 m y) -> FreeIx f i k1 m y Source # bindIx :: forall (m :: Type -> Type) x (j :: k0) (k1 :: k0) y (i :: k0). Monad m => (x -> FreeIx f j k1 m y) -> FreeIx f i j m x -> FreeIx f i k1 m y Source # thenIx :: forall (m :: Type -> Type) (j :: k0) (k1 :: k0) y (i :: k0) x. Monad m => FreeIx f j k1 m y -> FreeIx f i j m x -> FreeIx f i k1 m y Source # andThenIx :: forall (m :: Type -> Type) y (j :: k0) (k1 :: k0) z x (i :: k0). Monad m => (y -> FreeIx f j k1 m z) -> (x -> FreeIx f i j m y) -> x -> FreeIx f i k1 m z Source # | |
| IxFunctor f => IxMonadTrans (FreeIx f :: k -> k -> (Type -> Type) -> Type -> Type) Source # | |
Defined in Control.Monad.Trans.Indexed.Free.Wrap Methods apIx :: forall (m :: Type -> Type) (i :: k0) (j :: k0) x y (k1 :: k0). Monad m => FreeIx f i j m (x -> y) -> FreeIx f j k1 m x -> FreeIx f i k1 m y Source # joinIx :: forall (m :: Type -> Type) (i :: k0) (j :: k0) (k1 :: k0) y. Monad m => FreeIx f i j m (FreeIx f j k1 m y) -> FreeIx f i k1 m y Source # bindIx :: forall (m :: Type -> Type) x (j :: k0) (k1 :: k0) y (i :: k0). Monad m => (x -> FreeIx f j k1 m y) -> FreeIx f i j m x -> FreeIx f i k1 m y Source # thenIx :: forall (m :: Type -> Type) (j :: k0) (k1 :: k0) y (i :: k0) x. Monad m => FreeIx f j k1 m y -> FreeIx f i j m x -> FreeIx f i k1 m y Source # andThenIx :: forall (m :: Type -> Type) y (j :: k0) (k1 :: k0) z x (i :: k0). Monad m => (y -> FreeIx f j k1 m z) -> (x -> FreeIx f i j m y) -> x -> FreeIx f i k1 m z Source # | |
| Category w => IxMonadTrans (WriterIx w :: k -> k -> (Type -> Type) -> Type -> Type) Source # | |
Defined in Control.Monad.Trans.Indexed.Writer Methods apIx :: forall (m :: Type -> Type) (i :: k0) (j :: k0) x y (k1 :: k0). Monad m => WriterIx w i j m (x -> y) -> WriterIx w j k1 m x -> WriterIx w i k1 m y Source # joinIx :: forall (m :: Type -> Type) (i :: k0) (j :: k0) (k1 :: k0) y. Monad m => WriterIx w i j m (WriterIx w j k1 m y) -> WriterIx w i k1 m y Source # bindIx :: forall (m :: Type -> Type) x (j :: k0) (k1 :: k0) y (i :: k0). Monad m => (x -> WriterIx w j k1 m y) -> WriterIx w i j m x -> WriterIx w i k1 m y Source # thenIx :: forall (m :: Type -> Type) (j :: k0) (k1 :: k0) y (i :: k0) x. Monad m => WriterIx w j k1 m y -> WriterIx w i j m x -> WriterIx w i k1 m y Source # andThenIx :: forall (m :: Type -> Type) y (j :: k0) (k1 :: k0) z x (i :: k0). Monad m => (y -> WriterIx w j k1 m z) -> (x -> WriterIx w i j m y) -> x -> WriterIx w i k1 m z Source # | |
newtype Indexed t m r i j Source #
Indexed reshuffles the type parameters of an IxMonadTrans,
exposing its Category instance.
Constructors
| Indexed | |
Fields
| |