{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.Causal.Filter.Recursive.Integration where
import qualified Synthesizer.Causal.Process as Causal
import qualified Control.Monad.Trans.State as State
import qualified Algebra.Additive as Additive
import NumericPrelude.Numeric
import NumericPrelude.Base
{-# INLINE run #-}
run :: Additive.C v => Causal.T v v
run = Causal.fromState (\x -> State.modify (x+) >> State.get) zero
{-# INLINE runInit #-}
runInit :: Additive.C v => v -> Causal.T v v
runInit = Causal.fromState (\x -> State.state (\s -> (s, s+x)))