module Fx.Executor
(
Executor(..),
mapEffect,
mapContext,
execute,
)
where
import Fx.Prelude
newtype Executor effect context =
Executor (forall result. effect result -> context result)
execute :: Executor effect context -> effect result -> context result
execute (Executor def) effect =
def effect
mapEffect :: (forall result. newEffect result -> oldEffect result) -> Executor oldEffect context -> Executor newEffect context
mapEffect mapping (Executor fn) =
Executor (fn . mapping)
mapContext :: (forall result. oldContext result -> newContext result) -> Executor effect oldContext -> Executor effect newContext
mapContext mapping (Executor fn) =
Executor (mapping . fn)