{-# options_haddock prune #-}
module Polysemy.Process.Effect.Process where
import Polysemy (makeSem_)
import Polysemy.Conc.Effect.Scoped (Scoped, scoped)
import Polysemy.Resume (type (!!))
data Process i o e :: Effect where
Recv :: Process i o e m o
RecvError :: Process i o e m e
Send :: i -> Process i o e m ()
makeSem_ ''Process
recv ::
∀ i o e r .
Member (Process i o e) r =>
Sem r o
recvError ::
∀ i o e r .
Member (Process i o e) r =>
Sem r e
send ::
∀ i o e r .
Member (Process i o e) r =>
i ->
Sem r ()
withProcess ::
∀ resource i o e err r .
Member (Scoped resource (Process i o e !! err)) r =>
InterpreterFor (Process i o e !! err) r
withProcess :: InterpreterFor (Process i o e !! err) r
withProcess =
forall resource (effect :: Effect) (r :: [Effect]).
Member (Scoped resource effect) r =>
InterpreterFor effect r
forall (effect :: Effect) (r :: [Effect]).
Member (Scoped resource effect) r =>
InterpreterFor effect r
scoped @resource