synthesizer-llvm-0.6: src/Synthesizer/LLVM/Causal/ProcessValue.hs
{- |
This module provides functions similar to
"Synthesizer.LLVM.Causal.Process"
but expects functions that operate on 'Value.T'.
This way you can use common arithmetic operators
instead of LLVM assembly functions.
-}
module Synthesizer.LLVM.Causal.ProcessValue (
map, zipWith, mapAccum,
) where
import qualified Synthesizer.LLVM.Causal.Process as Causal
import qualified Synthesizer.LLVM.Simple.Value as Value
import qualified LLVM.Extra.Memory as Memory
import Foreign.Storable.Tuple ()
import Prelude ()
map ::
(Causal.C process) =>
(Value.T a -> Value.T b) ->
process a b
map f =
Causal.map (Value.unlift1 f)
zipWith ::
(Causal.C process) =>
(Value.T a -> Value.T b -> Value.T c) ->
process (a,b) c
zipWith f =
Causal.zipWith (Value.unlift2 f)
mapAccum ::
(Causal.C process, Memory.C s) =>
(Value.T a -> Value.T s -> (Value.T b, Value.T s)) ->
Value.T s ->
process a b
mapAccum next start =
Causal.mapAccum
(Value.unlift2 next)
(Value.unlift0 start)