in-other-words-0.2.0.0: A higher-order effect system where the sky's the limit
Safe HaskellNone
LanguageHaskell2010

Control.Effect.Stepped

Synopsis

Documentation

data SteppedC (e :: Effect) m a Source #

A carrier for any first-order effect e that allows for dividing a computation into several steps, where each step is seperated by the use of the effect.

This can be used to implement coroutines.

Instances

Instances details
(Monoid w, Carrier m, Threaders '[SteppedThreads] m p) => PrimHandler ListenSteppedH (ListenPrim w) (SteppedC (Tell w) m) Source # 
Instance details

Defined in Control.Effect.Internal.Intercept

(FirstOrder e, Carrier m, Threaders '[SteppedThreads] m p) => PrimHandler InterceptH (Unravel (InterceptB e)) (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Internal.Intercept

MonadBase b m => MonadBase b (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

liftBase :: b α -> SteppedC e m α #

MonadTrans (SteppedC e) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

lift :: Monad m => m a -> SteppedC e m a #

Monad (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

(>>=) :: SteppedC e m a -> (a -> SteppedC e m b) -> SteppedC e m b #

(>>) :: SteppedC e m a -> SteppedC e m b -> SteppedC e m b #

return :: a -> SteppedC e m a #

Functor (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

fmap :: (a -> b) -> SteppedC e m a -> SteppedC e m b #

(<$) :: a -> SteppedC e m b -> SteppedC e m a #

MonadFail m => MonadFail (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

fail :: String -> SteppedC e m a #

Applicative (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

pure :: a -> SteppedC e m a #

(<*>) :: SteppedC e m (a -> b) -> SteppedC e m a -> SteppedC e m b #

liftA2 :: (a -> b -> c) -> SteppedC e m a -> SteppedC e m b -> SteppedC e m c #

(*>) :: SteppedC e m a -> SteppedC e m b -> SteppedC e m b #

(<*) :: SteppedC e m a -> SteppedC e m b -> SteppedC e m a #

MonadIO m => MonadIO (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

liftIO :: IO a -> SteppedC e m a #

MonadThrow m => MonadThrow (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

throwM :: Exception e0 => e0 -> SteppedC e m a #

MonadCatch m => MonadCatch (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

catch :: Exception e0 => SteppedC e m a -> (e0 -> SteppedC e m a) -> SteppedC e m a #

(Threads (FreeT (FOEff e)) (Prims m), Carrier m) => Carrier (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Associated Types

type Derivs (SteppedC e m) :: [Effect] Source #

type Prims (SteppedC e m) :: [Effect] Source #

type Derivs (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

type Derivs (SteppedC e m) = e ': Derivs m
type Prims (SteppedC e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

type Prims (SteppedC e m) = Prims m

data Steps (e :: Effect) m a where Source #

A stack of continuations of m that eventually produces a result of type a. Each continuation is seperated by the use of the effect e.

Constructors

Done :: a -> Steps e m a 
More :: e q x -> (x -> m (Steps e m a)) -> Steps e m a 

Instances

Instances details
Functor m => Monad (Steps e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

(>>=) :: Steps e m a -> (a -> Steps e m b) -> Steps e m b #

(>>) :: Steps e m a -> Steps e m b -> Steps e m b #

return :: a -> Steps e m a #

Functor m => Functor (Steps e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

fmap :: (a -> b) -> Steps e m a -> Steps e m b #

(<$) :: a -> Steps e m b -> Steps e m a #

Functor m => Applicative (Steps e m) Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

Methods

pure :: a -> Steps e m a #

(<*>) :: Steps e m (a -> b) -> Steps e m a -> Steps e m b #

liftA2 :: (a -> b -> c) -> Steps e m a -> Steps e m b -> Steps e m c #

(*>) :: Steps e m a -> Steps e m b -> Steps e m b #

(<*) :: Steps e m a -> Steps e m b -> Steps e m a #

steps :: forall e m a p. (Carrier m, Threaders '[SteppedThreads] m p) => SteppedC e m a -> m (Steps e m a) Source #

Run the first-order effect e by breaking the computation using it into steps, where each step is seperated by the use of an action of e.

Derivs (SteppedC e m) = e ': Derivs m
Prims  (SteppedC e m) = Prims m

unsteps :: forall e m a. (FirstOrder e, Member e (Derivs m), Carrier m) => Steps e m a -> m a Source #

Execute all the steps of a computation.

liftSteps :: (MonadTrans t, Monad m) => Steps e m a -> Steps e (t m) a Source #

class (forall m n x. Coercible (e m x) (e n x)) => FirstOrder (e :: Effect) Source #

A constraint that e is first-order.

This is automatically deduced by the compiler.

Instances

Instances details
(forall (m :: Type -> Type) (n :: Type -> Type) x. Coercible (e m x) (e n x)) => FirstOrder e Source # 
Instance details

Defined in Control.Effect.Carrier.Internal.Stepped

type SteppedThreads = FreeThreads Source #

SteppedThreads accepts the following primitive effects: