hs-ix-0.2.0.0: Indexed applicative functors and monads
Safe HaskellNone
LanguageHaskell2010

Data.Functor.Indexed

Description

Indexed applicative functors and monads: see Apply, Bind, Cobind.

Synopsis
  • newtype IxWrap f i j a = IxWrap {}
  • class (forall i j. Functor (ɯ i j)) => Cobind ɯ where
    • cut :: ɯ i k a -> ɯ i j (ɯ j k a)
    • (<<=) :: (ɯ j k a -> b) -> ɯ i k a -> ɯ i j b
  • class Apply m => Bind m where
    • join :: m i j (m j k a) -> m i k a
    • (>>=) :: m i j a -> (a -> m j k b) -> m i k b
  • class (forall i j. Functor (p i j)) => Apply p where
    • (<*>) :: p i j (a -> b) -> p j k a -> p i k b
    • (*>) :: p i j a -> p j k b -> p i k b
    • (<*) :: p i j a -> p j k b -> p i k a
    • liftA2 :: (a -> b -> c) -> p i j a -> p j k b -> p i k c
  • (<**>) :: Apply p => p i j a -> p j k (a -> b) -> p i k b
  • apIxMonad :: (Bind m, forall k. Applicative (m k k)) => m i j (a -> b) -> m j k a -> m i k b
  • (=>>) :: Cobind ɯ => ɯ i k a -> (ɯ j k a -> b) -> ɯ i j b
  • (=>=) :: Cobind ɯ => (ɯ j k a -> b) -> (ɯ i j b -> c) -> ɯ i k a -> c
  • (=<=) :: Cobind ɯ => (ɯ i j b -> c) -> (ɯ j k a -> b) -> ɯ i k a -> c
  • (>=>) :: Bind m => (a -> m i j b) -> (b -> m j k c) -> a -> m i k c
  • (<=<) :: Bind m => (b -> m j k c) -> (a -> m i j b) -> a -> m i k c
  • (=<<) :: Bind m => (a -> m j k b) -> m i j a -> m i k b
  • pure :: Applicative f => a -> f a
  • copure :: Comonad ɯ => ɯ a -> a

Documentation

newtype IxWrap f i j a Source #

Constructors

IxWrap 

Fields

Instances

Instances details
Comonad ɯ => Cobind (IxWrap ɯ :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

cut :: forall (i :: k0) (k1 :: k0) a (j :: k0). IxWrap ɯ i k1 a -> IxWrap ɯ i j (IxWrap ɯ j k1 a) Source #

(<<=) :: forall (j :: k0) (k1 :: k0) a b (i :: k0). (IxWrap ɯ j k1 a -> b) -> IxWrap ɯ i k1 a -> IxWrap ɯ i j b Source #

Monad m => Bind (IxWrap m :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

join :: forall (i :: k0) (j :: k0) (k1 :: k0) a. IxWrap m i j (IxWrap m j k1 a) -> IxWrap m i k1 a Source #

(>>=) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. IxWrap m i j a -> (a -> IxWrap m j k1 b) -> IxWrap m i k1 b Source #

Applicative p => Apply (IxWrap p :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

(<*>) :: forall (i :: k0) (j :: k0) a b (k1 :: k0). IxWrap p i j (a -> b) -> IxWrap p j k1 a -> IxWrap p i k1 b Source #

(*>) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. IxWrap p i j a -> IxWrap p j k1 b -> IxWrap p i k1 b Source #

(<*) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. IxWrap p i j a -> IxWrap p j k1 b -> IxWrap p i k1 a Source #

liftA2 :: forall a b c (i :: k0) (j :: k0) (k1 :: k0). (a -> b -> c) -> IxWrap p i j a -> IxWrap p j k1 b -> IxWrap p i k1 c Source #

Monad m => Monad (IxWrap m i j) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

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

(>>) :: IxWrap m i j a -> IxWrap m i j b -> IxWrap m i j b #

return :: a -> IxWrap m i j a #

Functor f => Functor (IxWrap f i j) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

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

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

Applicative p => Applicative (IxWrap p i j) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

pure :: a -> IxWrap p i j a #

(<*>) :: IxWrap p i j (a -> b) -> IxWrap p i j a -> IxWrap p i j b #

liftA2 :: (a -> b -> c) -> IxWrap p i j a -> IxWrap p i j b -> IxWrap p i j c #

(*>) :: IxWrap p i j a -> IxWrap p i j b -> IxWrap p i j b #

(<*) :: IxWrap p i j a -> IxWrap p i j b -> IxWrap p i j a #

Comonad ɯ => Comonad (IxWrap ɯ i j) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

copure :: IxWrap ɯ i j a -> a #

cut :: IxWrap ɯ i j a -> IxWrap ɯ i j (IxWrap ɯ i j a) #

(<<=) :: (IxWrap ɯ i j a -> b) -> IxWrap ɯ i j a -> IxWrap ɯ i j b #

class (forall i j. Functor (ɯ i j)) => Cobind ɯ where Source #

Dual of Bind

Laws in terms of cut:

Laws in terms of <<=:

Relation of cut and <<=:

Minimal complete definition

cut | (<<=)

Methods

cut :: ɯ i k a -> ɯ i j (ɯ j k a) Source #

(<<=) :: (ɯ j k a -> b) -> ɯ i k a -> ɯ i j b infixr 1 Source #

Instances

Instances details
Comonad ɯ => Cobind (IxWrap ɯ :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

cut :: forall (i :: k0) (k1 :: k0) a (j :: k0). IxWrap ɯ i k1 a -> IxWrap ɯ i j (IxWrap ɯ j k1 a) Source #

(<<=) :: forall (j :: k0) (k1 :: k0) a b (i :: k0). (IxWrap ɯ j k1 a -> b) -> IxWrap ɯ i k1 a -> IxWrap ɯ i j b Source #

(Comonad ɯ, Semigroupoid κ) => Cobind (CowriterT κ ɯ :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Control.Comonad.Indexed.Trans.Cowriter

Methods

cut :: forall (i :: k0) (k1 :: k0) a (j :: k0). CowriterT κ ɯ i k1 a -> CowriterT κ ɯ i j (CowriterT κ ɯ j k1 a) Source #

(<<=) :: forall (j :: k0) (k1 :: k0) a b (i :: k0). (CowriterT κ ɯ j k1 a -> b) -> CowriterT κ ɯ i k1 a -> CowriterT κ ɯ i j b Source #

Comonad ɯ => Cobind (CostateT ɯ :: Type -> Type -> Type -> Type) Source # 
Instance details

Defined in Control.Comonad.Indexed.Trans.Costate

Methods

cut :: forall (i :: k) (k :: k) a (j :: k). CostateT ɯ i k a -> CostateT ɯ i j (CostateT ɯ j k a) Source #

(<<=) :: forall (j :: k) (k :: k) a b (i :: k). (CostateT ɯ j k a -> b) -> CostateT ɯ i k a -> CostateT ɯ i j b Source #

class Apply m => Bind m where Source #

Functors of which nested levels can be combined

Laws in terms of join:

Laws in terms of >>=:

Relation of join and >>=:

Minimal complete definition

join | (>>=)

Methods

join :: m i j (m j k a) -> m i k a Source #

(>>=) :: m i j a -> (a -> m j k b) -> m i k b infixl 1 Source #

Instances

Instances details
Bind (ContT f :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Control.Monad.Indexed.Trans.Cont

Methods

join :: forall (i :: k0) (j :: k0) (k1 :: k0) a. ContT f i j (ContT f j k1 a) -> ContT f i k1 a Source #

(>>=) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. ContT f i j a -> (a -> ContT f j k1 b) -> ContT f i k1 b Source #

Monad m => Bind (IxWrap m :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

join :: forall (i :: k0) (j :: k0) (k1 :: k0) a. IxWrap m i j (IxWrap m j k1 a) -> IxWrap m i k1 a Source #

(>>=) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. IxWrap m i j a -> (a -> IxWrap m j k1 b) -> IxWrap m i k1 b Source #

(Semigroupoid κ, Monad m) => Bind (WriterT κ m :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Control.Monad.Indexed.Trans.Writer

Methods

join :: forall (i :: k0) (j :: k0) (k1 :: k0) a. WriterT κ m i j (WriterT κ m j k1 a) -> WriterT κ m i k1 a Source #

(>>=) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. WriterT κ m i j a -> (a -> WriterT κ m j k1 b) -> WriterT κ m i k1 b Source #

Monad m => Bind (StateT m :: Type -> Type -> Type -> Type) Source # 
Instance details

Defined in Control.Monad.Indexed.Trans.State

Methods

join :: forall (i :: k) (j :: k) (k :: k) a. StateT m i j (StateT m j k a) -> StateT m i k a Source #

(>>=) :: forall (i :: k) (j :: k) a (k :: k) b. StateT m i j a -> (a -> StateT m j k b) -> StateT m i k b Source #

class (forall i j. Functor (p i j)) => Apply p where Source #

Functors into which binary (and thus n-ary) functions can be lifted

Laws:

Relations of methods:

Minimal complete definition

(<*>) | liftA2

Methods

(<*>) :: p i j (a -> b) -> p j k a -> p i k b infixl 4 Source #

(*>) :: p i j a -> p j k b -> p i k b infixl 4 Source #

(<*) :: p i j a -> p j k b -> p i k a infixl 4 Source #

liftA2 :: (a -> b -> c) -> p i j a -> p j k b -> p i k c Source #

Instances

Instances details
Apply (ContT f :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Control.Monad.Indexed.Trans.Cont

Methods

(<*>) :: forall (i :: k0) (j :: k0) a b (k1 :: k0). ContT f i j (a -> b) -> ContT f j k1 a -> ContT f i k1 b Source #

(*>) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. ContT f i j a -> ContT f j k1 b -> ContT f i k1 b Source #

(<*) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. ContT f i j a -> ContT f j k1 b -> ContT f i k1 a Source #

liftA2 :: forall a b c (i :: k0) (j :: k0) (k1 :: k0). (a -> b -> c) -> ContT f i j a -> ContT f j k1 b -> ContT f i k1 c Source #

Applicative p => Apply (IxWrap p :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.Indexed

Methods

(<*>) :: forall (i :: k0) (j :: k0) a b (k1 :: k0). IxWrap p i j (a -> b) -> IxWrap p j k1 a -> IxWrap p i k1 b Source #

(*>) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. IxWrap p i j a -> IxWrap p j k1 b -> IxWrap p i k1 b Source #

(<*) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. IxWrap p i j a -> IxWrap p j k1 b -> IxWrap p i k1 a Source #

liftA2 :: forall a b c (i :: k0) (j :: k0) (k1 :: k0). (a -> b -> c) -> IxWrap p i j a -> IxWrap p j k1 b -> IxWrap p i k1 c Source #

(Semigroupoid κ, Applicative p) => Apply (WriterT κ p :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Control.Monad.Indexed.Trans.Writer

Methods

(<*>) :: forall (i :: k0) (j :: k0) a b (k1 :: k0). WriterT κ p i j (a -> b) -> WriterT κ p j k1 a -> WriterT κ p i k1 b Source #

(*>) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. WriterT κ p i j a -> WriterT κ p j k1 b -> WriterT κ p i k1 b Source #

(<*) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. WriterT κ p i j a -> WriterT κ p j k1 b -> WriterT κ p i k1 a Source #

liftA2 :: forall a b c (i :: k0) (j :: k0) (k1 :: k0). (a -> b -> c) -> WriterT κ p i j a -> WriterT κ p j k1 b -> WriterT κ p i k1 c Source #

Semigroupoid κ => Apply (Const κ :: k -> k -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.Indexed.Const

Methods

(<*>) :: forall (i :: k0) (j :: k0) a b (k1 :: k0). Const κ i j (a -> b) -> Const κ j k1 a -> Const κ i k1 b Source #

(*>) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. Const κ i j a -> Const κ j k1 b -> Const κ i k1 b Source #

(<*) :: forall (i :: k0) (j :: k0) a (k1 :: k0) b. Const κ i j a -> Const κ j k1 b -> Const κ i k1 a Source #

liftA2 :: forall a b c (i :: k0) (j :: k0) (k1 :: k0). (a -> b -> c) -> Const κ i j a -> Const κ j k1 b -> Const κ i k1 c Source #

Monad m => Apply (StateT m :: Type -> Type -> Type -> Type) Source # 
Instance details

Defined in Control.Monad.Indexed.Trans.State

Methods

(<*>) :: forall (i :: k) (j :: k) a b (k :: k). StateT m i j (a -> b) -> StateT m j k a -> StateT m i k b Source #

(*>) :: forall (i :: k) (j :: k) a (k :: k) b. StateT m i j a -> StateT m j k b -> StateT m i k b Source #

(<*) :: forall (i :: k) (j :: k) a (k :: k) b. StateT m i j a -> StateT m j k b -> StateT m i k a Source #

liftA2 :: forall a b c (i :: k) (j :: k) (k :: k). (a -> b -> c) -> StateT m i j a -> StateT m j k b -> StateT m i k c Source #

Applicative p => Apply (CostateT p :: Type -> Type -> Type -> Type) Source # 
Instance details

Defined in Control.Comonad.Indexed.Trans.Costate

Methods

(<*>) :: forall (i :: k) (j :: k) a b (k :: k). CostateT p i j (a -> b) -> CostateT p j k a -> CostateT p i k b Source #

(*>) :: forall (i :: k) (j :: k) a (k :: k) b. CostateT p i j a -> CostateT p j k b -> CostateT p i k b Source #

(<*) :: forall (i :: k) (j :: k) a (k :: k) b. CostateT p i j a -> CostateT p j k b -> CostateT p i k a Source #

liftA2 :: forall a b c (i :: k) (j :: k) (k :: k). (a -> b -> c) -> CostateT p i j a -> CostateT p j k b -> CostateT p i k c Source #

(<**>) :: Apply p => p i j a -> p j k (a -> b) -> p i k b infixl 4 Source #

apIxMonad :: (Bind m, forall k. Applicative (m k k)) => m i j (a -> b) -> m j k a -> m i k b Source #

(=>>) :: Cobind ɯ => ɯ i k a -> (ɯ j k a -> b) -> ɯ i j b infixl 1 Source #

(=>=) :: Cobind ɯ => (ɯ j k a -> b) -> (ɯ i j b -> c) -> ɯ i k a -> c infixr 1 Source #

(=<=) :: Cobind ɯ => (ɯ i j b -> c) -> (ɯ j k a -> b) -> ɯ i k a -> c infixr 1 Source #

(>=>) :: Bind m => (a -> m i j b) -> (b -> m j k c) -> a -> m i k c infixr 1 Source #

(<=<) :: Bind m => (b -> m j k c) -> (a -> m i j b) -> a -> m i k c infixr 1 Source #

(=<<) :: Bind m => (a -> m j k b) -> m i j a -> m i k b infixr 1 Source #

pure :: Applicative f => a -> f a #

Lift a value.

copure :: Comonad ɯ => ɯ a -> a #