synthesizer-llvm-0.6: src/Synthesizer/LLVM/Causal/ProcessPrivate.hs
module Synthesizer.LLVM.Causal.ProcessPrivate where
import Control.Arrow (Arrow, arr, (>>>), (&&&), )
loopNext ::
(Monad m) =>
(context -> (a,c) -> state -> m ((b,c), state)) ->
context -> a -> (c, state) -> m (b, (c, state))
loopNext next ctx a0 (c0,s0) = do
((b1,c1), s1) <- next ctx (a0,c0) s0
return (b1,(c1,s1))
feedbackControlledAux ::
Arrow arrow =>
arrow ((ctrl,a),c) b ->
arrow (ctrl,b) c ->
arrow ((ctrl,a),c) (b,c)
feedbackControlledAux forth back =
arr (fst.fst) &&& forth >>> arr snd &&& back