heftia-0.3.1.0: higher-order effects done right
Copyright(c) 2023 Yamada Ryo
LicenseMPL-2.0 (see the file LICENSE)
Maintainerymdfield@outlook.jp
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageGHC2021

Control.Freer

Description

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

Synopsis

Documentation

class (forall e. c (f e)) => Freer c f | f -> c where Source #

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

Minimal complete definition

liftIns, (interpretFreer | retractFreer, transformFreer)

Methods

liftIns :: e a -> f e a Source #

Lift a instruction into a Freer carrier.

interpretFreer :: c m => (e ~> m) -> f e a -> m a Source #

retractFreer :: c m => f m a -> m a Source #

transformFreer :: (e ~> e') -> f e a -> f e' a Source #

Translate instructions embedded in a Freer carrier.

reinterpretFreer :: (e ~> f e) -> f e a -> f e a Source #

Instances

Instances details
Freer Applicative Ap Source # 
Instance details

Defined in Control.Freer

Methods

liftIns :: e a -> Ap e a Source #

interpretFreer :: forall m (e :: Type -> Type) a. Applicative m => (e ~> m) -> Ap e a -> m a Source #

retractFreer :: Applicative m => Ap m a -> m a Source #

transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> Ap e a -> Ap e' a Source #

reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> Ap e) -> Ap e a -> Ap e a Source #

Freer Applicative Ap Source # 
Instance details

Defined in Control.Freer

Methods

liftIns :: e a -> Ap e a Source #

interpretFreer :: forall m (e :: Type -> Type) a. Applicative m => (e ~> m) -> Ap e a -> m a Source #

retractFreer :: Applicative m => Ap m a -> m a Source #

transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> Ap e a -> Ap e' a Source #

reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> Ap e) -> Ap e a -> Ap e a Source #

Freer Functor Coyoneda Source # 
Instance details

Defined in Control.Freer

Methods

liftIns :: e a -> Coyoneda e a Source #

interpretFreer :: forall m (e :: Type -> Type) a. Functor m => (e ~> m) -> Coyoneda e a -> m a Source #

retractFreer :: Functor m => Coyoneda m a -> m a Source #

transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> Coyoneda e a -> Coyoneda e' a Source #

reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> Coyoneda e) -> Coyoneda e a -> Coyoneda e a Source #

Freer Monad FreerChurch Source # 
Instance details

Defined in Control.Monad.Freer.Church

Methods

liftIns :: e a -> FreerChurch e a Source #

interpretFreer :: forall m (e :: Type -> Type) a. Monad m => (e ~> m) -> FreerChurch e a -> m a Source #

retractFreer :: Monad m => FreerChurch m a -> m a Source #

transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> FreerChurch e a -> FreerChurch e' a Source #

reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> FreerChurch e) -> FreerChurch e a -> FreerChurch e a Source #

Freer Monad FreerTree Source # 
Instance details

Defined in Control.Monad.Freer.Tree

Methods

liftIns :: e a -> FreerTree e a Source #

interpretFreer :: forall m (e :: Type -> Type) a. Monad m => (e ~> m) -> FreerTree e a -> m a Source #

retractFreer :: Monad m => FreerTree m a -> m a Source #

transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> FreerTree e a -> FreerTree e' a Source #

reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> FreerTree e) -> FreerTree e a -> FreerTree e a Source #

(Freer c fr, forall (e :: InsClass). c (ViaFreer fr e)) => Freer c (ViaFreer fr) Source # 
Instance details

Defined in Control.Freer

Methods

liftIns :: e a -> ViaFreer fr e a Source #

interpretFreer :: forall m (e :: Type -> Type) a. c m => (e ~> m) -> ViaFreer fr e a -> m a Source #

retractFreer :: c m => ViaFreer fr m a -> m a Source #

transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> ViaFreer fr e a -> ViaFreer fr e' a Source #

reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> ViaFreer fr e) -> ViaFreer fr e a -> ViaFreer fr e a Source #

(forall (e :: Type -> Type). c (FreerFinal c e)) => Freer c (FreerFinal c) Source # 
Instance details

Defined in Control.Freer.Final

Methods

liftIns :: e a -> FreerFinal c e a Source #

interpretFreer :: forall m (e :: Type -> Type) a. c m => (e ~> m) -> FreerFinal c e a -> m a Source #

retractFreer :: c m => FreerFinal c m a -> m a Source #

transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> FreerFinal c e a -> FreerFinal c e' a Source #

reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> FreerFinal c e) -> FreerFinal c e a -> FreerFinal c e a Source #

newtype ViaFreer (fr :: InsClass -> Type -> Type) (e :: InsClass) (a :: Type) Source #

Constructors

ViaFreer 

Fields

Instances

Instances details
(Freer c fr, InjectInsBy key e e') => SendInsBy (key :: k) e (ViaFreer fr e') Source # 
Instance details

Defined in Control.Freer

Methods

sendInsBy :: e a -> ViaFreer fr e' a #

(Freer c fr, forall (e :: InsClass). c (ViaFreer fr e)) => Freer c (ViaFreer fr) Source # 
Instance details

Defined in Control.Freer

Methods

liftIns :: e a -> ViaFreer fr e a Source #

interpretFreer :: forall m (e :: Type -> Type) a. c m => (e ~> m) -> ViaFreer fr e a -> m a Source #

retractFreer :: c m => ViaFreer fr m a -> m a Source #

transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> ViaFreer fr e a -> ViaFreer fr e' a Source #

reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> ViaFreer fr e) -> ViaFreer fr e a -> ViaFreer fr e a Source #

(Freer c fr, InjectIns e e') => SendIns e (ViaFreer fr e') Source # 
Instance details

Defined in Control.Freer

Methods

sendIns :: e a -> ViaFreer fr e' a #

(Freer c fr, InjectInsBy StateKey (State s) e, Monad (fr e)) => MonadState s (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

get :: ViaFreer fr e s #

put :: s -> ViaFreer fr e () #

state :: (s -> (a, s)) -> ViaFreer fr e a #

(MonadBase b (fr e), Monad b) => MonadBase b (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

liftBase :: b α -> ViaFreer fr e α #

(Freer c fr, InjectIns Fail e, Monad (fr e)) => MonadFail (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

fail :: String -> ViaFreer fr e a #

(Freer c fr, InjectIns IO e, Monad (fr e)) => MonadIO (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

liftIO :: IO a -> ViaFreer fr e a #

Foldable (fr e) => Foldable (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

fold :: Monoid m => ViaFreer fr e m -> m #

foldMap :: Monoid m => (a -> m) -> ViaFreer fr e a -> m #

foldMap' :: Monoid m => (a -> m) -> ViaFreer fr e a -> m #

foldr :: (a -> b -> b) -> b -> ViaFreer fr e a -> b #

foldr' :: (a -> b -> b) -> b -> ViaFreer fr e a -> b #

foldl :: (b -> a -> b) -> b -> ViaFreer fr e a -> b #

foldl' :: (b -> a -> b) -> b -> ViaFreer fr e a -> b #

foldr1 :: (a -> a -> a) -> ViaFreer fr e a -> a #

foldl1 :: (a -> a -> a) -> ViaFreer fr e a -> a #

toList :: ViaFreer fr e a -> [a] #

null :: ViaFreer fr e a -> Bool #

length :: ViaFreer fr e a -> Int #

elem :: Eq a => a -> ViaFreer fr e a -> Bool #

maximum :: Ord a => ViaFreer fr e a -> a #

minimum :: Ord a => ViaFreer fr e a -> a #

sum :: Num a => ViaFreer fr e a -> a #

product :: Num a => ViaFreer fr e a -> a #

Traversable (fr e) => Traversable (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

traverse :: Applicative f => (a -> f b) -> ViaFreer fr e a -> f (ViaFreer fr e b) #

sequenceA :: Applicative f => ViaFreer fr e (f a) -> f (ViaFreer fr e a) #

mapM :: Monad m => (a -> m b) -> ViaFreer fr e a -> m (ViaFreer fr e b) #

sequence :: Monad m => ViaFreer fr e (m a) -> m (ViaFreer fr e a) #

(Freer c fr, InjectIns Empty e, InjectIns Choose e, Monad (fr e)) => Alternative (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

empty :: ViaFreer fr e a #

(<|>) :: ViaFreer fr e a -> ViaFreer fr e a -> ViaFreer fr e a #

some :: ViaFreer fr e a -> ViaFreer fr e [a] #

many :: ViaFreer fr e a -> ViaFreer fr e [a] #

Applicative (fr e) => Applicative (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

pure :: a -> ViaFreer fr e a #

(<*>) :: ViaFreer fr e (a -> b) -> ViaFreer fr e a -> ViaFreer fr e b #

liftA2 :: (a -> b -> c) -> ViaFreer fr e a -> ViaFreer fr e b -> ViaFreer fr e c #

(*>) :: ViaFreer fr e a -> ViaFreer fr e b -> ViaFreer fr e b #

(<*) :: ViaFreer fr e a -> ViaFreer fr e b -> ViaFreer fr e a #

Functor (fr e) => Functor (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

fmap :: (a -> b) -> ViaFreer fr e a -> ViaFreer fr e b #

(<$) :: a -> ViaFreer fr e b -> ViaFreer fr e a #

Monad (fr e) => Monad (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

(>>=) :: ViaFreer fr e a -> (a -> ViaFreer fr e b) -> ViaFreer fr e b #

(>>) :: ViaFreer fr e a -> ViaFreer fr e b -> ViaFreer fr e b #

return :: a -> ViaFreer fr e a #

(Freer c fr, InjectIns Empty e, InjectIns Choose e, Monad (fr e)) => MonadPlus (ViaFreer fr e) Source # 
Instance details

Defined in Control.Freer

Methods

mzero :: ViaFreer fr e a #

mplus :: ViaFreer fr e a -> ViaFreer fr e a -> ViaFreer fr e a #

Read (fr e a) => Read (ViaFreer fr e a) Source # 
Instance details

Defined in Control.Freer

Methods

readsPrec :: Int -> ReadS (ViaFreer fr e a) #

readList :: ReadS [ViaFreer fr e a] #

readPrec :: ReadPrec (ViaFreer fr e a) #

readListPrec :: ReadPrec [ViaFreer fr e a] #

Show (fr e a) => Show (ViaFreer fr e a) Source # 
Instance details

Defined in Control.Freer

Methods

showsPrec :: Int -> ViaFreer fr e a -> ShowS #

show :: ViaFreer fr e a -> String #

showList :: [ViaFreer fr e a] -> ShowS #

Eq (fr e a) => Eq (ViaFreer fr e a) Source # 
Instance details

Defined in Control.Freer

Methods

(==) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool #

(/=) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool #

Ord (fr e a) => Ord (ViaFreer fr e a) Source # 
Instance details

Defined in Control.Freer

Methods

compare :: ViaFreer fr e a -> ViaFreer fr e a -> Ordering #

(<) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool #

(<=) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool #

(>) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool #

(>=) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool #

max :: ViaFreer fr e a -> ViaFreer fr e a -> ViaFreer fr e a #

min :: ViaFreer fr e a -> ViaFreer fr e a -> ViaFreer fr e a #

class InjectIns e (e' :: InsClass) where Source #

Methods

injectIns :: e ~> e' Source #

Instances

Instances details
Member u e es => InjectIns e (EffUnionF u es) Source # 
Instance details

Defined in Control.Effect.Free

Methods

injectIns :: e ~> EffUnionF u es Source #

MemberRec u (LiftIns e) efs => InjectIns e (EffUnion u ehs efs f) Source # 
Instance details

Defined in Control.Effect.Hefty

Methods

injectIns :: e ~> EffUnion u ehs efs f Source #

class InjectInsBy key e (e' :: InsClass) | key e' -> e where Source #

Methods

injectInsBy :: e ~> e' Source #

Instances

Instances details
(MemberRec u (LiftIns (key #> e)) efs, LiftIns (key #> e) ~ FromJust (Lookup key efs)) => InjectInsBy (key :: k) e (EffUnion u ehs efs f) Source # 
Instance details

Defined in Control.Effect.Hefty

Methods

injectInsBy :: e ~> EffUnion u ehs efs f Source #

overFreer :: (fr e a -> fr' e' b) -> ViaFreer fr e a -> ViaFreer fr' e' b Source #

reencodeFreer :: (Freer c fr, Freer c' fr', c (fr' f)) => fr f ~> fr' f Source #