indexed-transformers-0.1.0.4: Atkey indexed monad transformers
Copyright(C) 2024 Eitan Chatav
LicenseBSD 3-Clause License (see the file LICENSE)
MaintainerEitan Chatav <eitan.chatav@gmail.com>
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Monad.Trans.Indexed.Free.Wrap

Description

An instance of the free indexed monad transformer.

Documentation

newtype FreeIx f i j m x Source #

Constructors

FreeIx 

Fields

Instances

Instances details
IxMonadTransFree (FreeIx :: (k -> k -> Type -> Type) -> k -> k -> (Type -> Type) -> Type -> Type) Source # 
Instance details

Defined in Control.Monad.Trans.Indexed.Free.Wrap

Methods

liftFreeIx :: forall f (m :: Type -> Type) (i :: k0) (j :: k0) x. (IxFunctor f, Monad m) => f i j x -> FreeIx f i j m x Source #

hoistFreeIx :: forall f g (m :: Type -> Type) (i :: k0) (j :: k0) x. (IxFunctor f, IxFunctor g, Monad m) => (forall (i1 :: k0) (j1 :: k0) x1. f i1 j1 x1 -> g i1 j1 x1) -> FreeIx f i j m x -> FreeIx g i j m x Source #

foldFreeIx :: forall f t (m :: Type -> Type) (i :: k0) (j :: k0) x. (IxFunctor f, IxMonadTrans t, Monad m) => (forall (i1 :: k0) (j1 :: k0) x1. f i1 j1 x1 -> t i1 j1 m x1) -> FreeIx f i j m x -> t i j m x Source #

IxFunctor f => IxMonadTrans (FreeIx f :: k -> k -> (Type -> Type) -> Type -> Type) Source # 
Instance details

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 #

(IxFunctor f, Monad m, i ~ j) => MonadFree (f i j) (FreeIx f i j m) Source # 
Instance details

Defined in Control.Monad.Trans.Indexed.Free.Wrap

Methods

wrap :: f i j (FreeIx f i j m a) -> FreeIx f i j m a #

(IxFunctor f, i ~ j) => MonadTrans (FreeIx f i j) Source # 
Instance details

Defined in Control.Monad.Trans.Indexed.Free.Wrap

Methods

lift :: Monad m => m a -> FreeIx f i j m a #

(IxFunctor f, i ~ j, Monad m) => Applicative (FreeIx f i j m) Source # 
Instance details

Defined in Control.Monad.Trans.Indexed.Free.Wrap

Methods

pure :: a -> FreeIx f i j m a #

(<*>) :: FreeIx f i j m (a -> b) -> FreeIx f i j m a -> FreeIx f i j m b #

liftA2 :: (a -> b -> c) -> FreeIx f i j m a -> FreeIx f i j m b -> FreeIx f i j m c #

(*>) :: FreeIx f i j m a -> FreeIx f i j m b -> FreeIx f i j m b #

(<*) :: FreeIx f i j m a -> FreeIx f i j m b -> FreeIx f i j m a #

(IxFunctor f, Monad m) => Functor (FreeIx f i j m) Source # 
Instance details

Defined in Control.Monad.Trans.Indexed.Free.Wrap

Methods

fmap :: (a -> b) -> FreeIx f i j m a -> FreeIx f i j m b #

(<$) :: a -> FreeIx f i j m b -> FreeIx f i j m a #

(IxFunctor f, i ~ j, Monad m) => Monad (FreeIx f i j m) Source # 
Instance details

Defined in Control.Monad.Trans.Indexed.Free.Wrap

Methods

(>>=) :: FreeIx f i j m a -> (a -> FreeIx f i j m b) -> FreeIx f i j m b #

(>>) :: FreeIx f i j m a -> FreeIx f i j m b -> FreeIx f i j m b #

return :: a -> FreeIx f i j m a #

data WrapIx f i j m x where Source #

Constructors

Unwrap :: x -> WrapIx f i i m x 
Wrap :: f i j (FreeIx f j k m x) -> WrapIx f i k m x 

Instances

Instances details
(IxFunctor f, Monad m) => Functor (WrapIx f i j m) Source # 
Instance details

Defined in Control.Monad.Trans.Indexed.Free.Wrap

Methods

fmap :: (a -> b) -> WrapIx f i j m a -> WrapIx f i j m b #

(<$) :: a -> WrapIx f i j m b -> WrapIx f i j m a #