module SupplyChain.Job
(
Job,
perform, order, effect,
run, eval,
alter, alter',
)
where
import SupplyChain.Core.Effect (Effect)
import SupplyChain.Core.Job (Job)
import qualified SupplyChain.Core.Job as Job
import Control.Monad (Monad)
import Data.Function ((.))
import Data.Functor.Const (Const)
import Data.Void (Void)
alter :: (forall x. Effect up action x -> Job up' action' x)
-> Job up action product -> Job up' action' product
alter :: forall (up :: * -> *) (action :: * -> *) (up' :: * -> *)
(action' :: * -> *) product.
(forall x. Effect up action x -> Job up' action' x)
-> Job up action product -> Job up' action' product
alter forall x. Effect up action x -> Job up' action' x
f = forall (up :: * -> *) (action :: * -> *) (up' :: * -> *)
(action' :: * -> *) product.
(forall x. Effect up action x -> Job up' action' x)
-> Job up action product -> Job up' action' product
Job.alter forall x. Effect up action x -> Job up' action' x
f
alter' :: (forall x. Effect up action x -> Effect up' action' x)
-> Job up action product -> Job up' action' product
alter' :: forall (up :: * -> *) (action :: * -> *) (up' :: * -> *)
(action' :: * -> *) product.
(forall x. Effect up action x -> Effect up' action' x)
-> Job up action product -> Job up' action' product
alter' forall x. Effect up action x -> Effect up' action' x
f = forall (up :: * -> *) (action :: * -> *) (up' :: * -> *)
(action' :: * -> *) product.
(forall x. Effect up action x -> Job up' action' x)
-> Job up action product -> Job up' action' product
Job.alter (forall (up :: * -> *) (action :: * -> *) product.
Effect up action product -> Job up action product
effect forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall x. Effect up action x -> Effect up' action' x
f)
perform :: action product
-> Job up action product
perform :: forall (action :: * -> *) product (up :: * -> *).
action product -> Job up action product
perform = forall (action :: * -> *) product (up :: * -> *).
action product -> Job up action product
Job.perform
order :: up product
-> Job up action product
order :: forall (up :: * -> *) product (action :: * -> *).
up product -> Job up action product
order = forall (up :: * -> *) product (action :: * -> *).
up product -> Job up action product
Job.order
effect :: Effect up action product
-> Job up action product
effect :: forall (up :: * -> *) (action :: * -> *) product.
Effect up action product -> Job up action product
effect = forall (up :: * -> *) (action :: * -> *) product.
Effect up action product -> Job up action product
Job.effect
run :: Monad action =>
Job (Const Void) action product
-> action product
run :: forall (action :: * -> *) product.
Monad action =>
Job (Const Void) action product -> action product
run = forall (action :: * -> *) product.
Monad action =>
Job (Const Void) action product -> action product
Job.run
eval :: Job (Const Void) (Const Void) product
-> product
eval :: forall product. Job (Const Void) (Const Void) product -> product
eval = forall product. Job (Const Void) (Const Void) product -> product
Job.eval