heftia-0.1.0.0: Higher-order version of Freer.
Copyright(c) 2023 Yamada Ryo
LicenseMPL-2.0 (see the file LICENSE)
Maintainerymdfield@outlook.jp
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageGHC2021

Control.Monad.Trans.Freer

Description

A type class to abstract away the encoding details of the Freer monad transformers.

Synopsis

Documentation

class (TransFreer Monad fr, forall ins. MonadTrans (fr ins)) => MonadTransFreer fr where Source #

A type class to abstract away the encoding details of the Freer monad transformers.

Minimal complete definition

Nothing

Methods

interpretMK :: Monad m => (ins ~> ContT r m) -> fr ins m ~> ContT r m Source #

reinterpretMK :: Monad m => (ins ~> ContT r (fr ins m)) -> fr ins m ~> ContT r (fr ins m) Source #

interpretMT :: (Monad m, MonadTrans t, Monad (t m)) => (ins ~> t m) -> fr ins m ~> t m Source #

reinterpretMT :: forall m t n ins. (Monad m, MonadTrans t, Coercible n (fr ins m), Monad (t n), Monad n) => (ins ~> t n) -> fr ins m ~> t n Source #

Instances

Instances details
MonadTransFreer (FreerChurchT :: Instruction -> (Type -> Type) -> Type -> TYPE LiftedRep) Source # 
Instance details

Defined in Control.Monad.Trans.Freer.Church

Methods

interpretMK :: forall (m :: Type -> Type) (ins :: Type -> Type) r. Monad m => (ins ~> ContT r m) -> FreerChurchT ins m ~> ContT r m Source #

reinterpretMK :: forall (m :: Type -> Type) (ins :: Type -> Type) r. Monad m => (ins ~> ContT r (FreerChurchT ins m)) -> FreerChurchT ins m ~> ContT r (FreerChurchT ins m) Source #

interpretMT :: forall (m :: Type -> Type) (t :: (Type -> Type) -> Type -> Type) (ins :: Type -> Type). (Monad m, MonadTrans t, Monad (t m)) => (ins ~> t m) -> FreerChurchT ins m ~> t m Source #

reinterpretMT :: forall (m :: Type -> Type) (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type) (ins :: Type -> Type). (Monad m, MonadTrans t, Coercible n (FreerChurchT ins m), Monad (t n), Monad n) => (ins ~> t n) -> FreerChurchT ins m ~> t n Source #

reinterpretTTViaFinal :: forall fr m t n ins. (MonadTransFreer fr, Monad m, MonadTrans t, Coercible n (fr ins m), Monad (t n), Monad n) => (ins ~> t n) -> fr ins m ~> t n Source #

newtype ViaLiftLower (fr :: Instruction -> (Type -> Type) -> Type -> Type) ins m a Source #

Constructors

ViaLiftLower 

Fields

Instances

Instances details
TransFreer Monad h => MonadTrans (ViaLiftLower h ins) Source # 
Instance details

Defined in Control.Monad.Trans.Freer

Methods

lift :: Monad m => m a -> ViaLiftLower h ins m a #

Foldable (fr ins m) => Foldable (ViaLiftLower fr ins m) Source # 
Instance details

Defined in Control.Monad.Trans.Freer

Methods

fold :: Monoid m0 => ViaLiftLower fr ins m m0 -> m0 #

foldMap :: Monoid m0 => (a -> m0) -> ViaLiftLower fr ins m a -> m0 #

foldMap' :: Monoid m0 => (a -> m0) -> ViaLiftLower fr ins m a -> m0 #

foldr :: (a -> b -> b) -> b -> ViaLiftLower fr ins m a -> b #

foldr' :: (a -> b -> b) -> b -> ViaLiftLower fr ins m a -> b #

foldl :: (b -> a -> b) -> b -> ViaLiftLower fr ins m a -> b #

foldl' :: (b -> a -> b) -> b -> ViaLiftLower fr ins m a -> b #

foldr1 :: (a -> a -> a) -> ViaLiftLower fr ins m a -> a #

foldl1 :: (a -> a -> a) -> ViaLiftLower fr ins m a -> a #

toList :: ViaLiftLower fr ins m a -> [a] #

null :: ViaLiftLower fr ins m a -> Bool #

length :: ViaLiftLower fr ins m a -> Int #

elem :: Eq a => a -> ViaLiftLower fr ins m a -> Bool #

maximum :: Ord a => ViaLiftLower fr ins m a -> a #

minimum :: Ord a => ViaLiftLower fr ins m a -> a #

sum :: Num a => ViaLiftLower fr ins m a -> a #

product :: Num a => ViaLiftLower fr ins m a -> a #

Traversable (fr ins m) => Traversable (ViaLiftLower fr ins m) Source # 
Instance details

Defined in Control.Monad.Trans.Freer

Methods

traverse :: Applicative f => (a -> f b) -> ViaLiftLower fr ins m a -> f (ViaLiftLower fr ins m b) #

sequenceA :: Applicative f => ViaLiftLower fr ins m (f a) -> f (ViaLiftLower fr ins m a) #

mapM :: Monad m0 => (a -> m0 b) -> ViaLiftLower fr ins m a -> m0 (ViaLiftLower fr ins m b) #

sequence :: Monad m0 => ViaLiftLower fr ins m (m0 a) -> m0 (ViaLiftLower fr ins m a) #

Applicative (fr ins m) => Applicative (ViaLiftLower fr ins m) Source # 
Instance details

Defined in Control.Monad.Trans.Freer

Methods

pure :: a -> ViaLiftLower fr ins m a #

(<*>) :: ViaLiftLower fr ins m (a -> b) -> ViaLiftLower fr ins m a -> ViaLiftLower fr ins m b #

liftA2 :: (a -> b -> c) -> ViaLiftLower fr ins m a -> ViaLiftLower fr ins m b -> ViaLiftLower fr ins m c #

(*>) :: ViaLiftLower fr ins m a -> ViaLiftLower fr ins m b -> ViaLiftLower fr ins m b #

(<*) :: ViaLiftLower fr ins m a -> ViaLiftLower fr ins m b -> ViaLiftLower fr ins m a #

Functor (fr ins m) => Functor (ViaLiftLower fr ins m) Source # 
Instance details

Defined in Control.Monad.Trans.Freer

Methods

fmap :: (a -> b) -> ViaLiftLower fr ins m a -> ViaLiftLower fr ins m b #

(<$) :: a -> ViaLiftLower fr ins m b -> ViaLiftLower fr ins m a #

Monad (fr ins m) => Monad (ViaLiftLower fr ins m) Source # 
Instance details

Defined in Control.Monad.Trans.Freer

Methods

(>>=) :: ViaLiftLower fr ins m a -> (a -> ViaLiftLower fr ins m b) -> ViaLiftLower fr ins m b #

(>>) :: ViaLiftLower fr ins m a -> ViaLiftLower fr ins m b -> ViaLiftLower fr ins m b #

return :: a -> ViaLiftLower fr ins m a #