Copyright | (c) 2023 Yamada Ryo |
---|---|
License | MPL-2.0 (see the file LICENSE) |
Maintainer | ymdfield@outlook.jp |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | GHC2021 |
A type class to abstract away the encoding details of the Freer monad transformers.
Synopsis
- class (TransFreer Monad fr, forall ins. MonadTrans (fr ins)) => MonadTransFreer fr where
- interpretMK :: Monad m => (ins ~> ContT r m) -> fr ins m ~> ContT r m
- reinterpretMK :: Monad m => (ins ~> ContT r (fr ins m)) -> fr ins m ~> ContT r (fr ins m)
- interpretMT :: (Monad m, MonadTrans t, Monad (t m)) => (ins ~> t m) -> fr ins m ~> t m
- 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
- 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
- newtype ViaLiftLower (fr :: Instruction -> (Type -> Type) -> Type -> Type) ins m a = ViaLiftLower {
- runViaLiftLower :: fr ins m a
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.
Nothing
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
MonadTransFreer (FreerChurchT :: Instruction -> (Type -> Type) -> Type -> TYPE LiftedRep) Source # | |
Defined in Control.Monad.Trans.Freer.Church 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 #
ViaLiftLower | |
|
Instances
TransFreer Monad h => MonadTrans (ViaLiftLower h ins) Source # | |
Defined in Control.Monad.Trans.Freer lift :: Monad m => m a -> ViaLiftLower h ins m a # | |
Foldable (fr ins m) => Foldable (ViaLiftLower fr ins m) Source # | |
Defined in Control.Monad.Trans.Freer 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 # | |
Defined in Control.Monad.Trans.Freer 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 # | |
Defined in Control.Monad.Trans.Freer 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 # | |
Defined in Control.Monad.Trans.Freer 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 # | |
Defined in Control.Monad.Trans.Freer (>>=) :: 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 # |