{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.Dimensional.ChunkySize.Signal (
store, length,
) where
import qualified Synthesizer.Dimensional.Rate as Rate
import qualified Synthesizer.Dimensional.Amplitude as Amp
import qualified Synthesizer.Dimensional.Signal.Private as SigA
import qualified Synthesizer.ChunkySize as ChunkySize
import qualified Synthesizer.ChunkySize.Cut as CutC
import qualified Synthesizer.ChunkySize.Signal as SigC
import qualified Synthesizer.State.Signal as Sig
type Signal s amp sig =
SigA.T (Rate.Phantom s) amp sig
type Size s =
SigA.T (Rate.Phantom s) Amp.Abstract ChunkySize.T
{-# INLINE store #-}
store ::
(SigC.Write sig yv) =>
Size s ->
Signal s amp (Sig.T yv) ->
Signal s amp (sig yv)
store :: forall (sig :: * -> *) yv s amp.
Write sig yv =>
Size s -> Signal s amp (T yv) -> Signal s amp (sig yv)
store =
\Size s
cs -> forall sig0 sig1 rate amp.
(sig0 -> sig1) -> T rate amp sig0 -> T rate amp sig1
SigA.processBody (forall (sig :: * -> *) y. Write sig y => T -> T y -> sig y
SigC.fromState (forall rate amplitude body. T rate amplitude body -> body
SigA.body Size s
cs))
{-# INLINE length #-}
length :: (CutC.Read sig) =>
Signal s amp sig ->
Size s
length :: forall sig s amp. Read sig => Signal s amp sig -> Size s
length =
\Signal s amp sig
xs -> forall sig s. sig -> T (Phantom s) Abstract sig
SigA.abstractFromBody (forall sig. Read sig => sig -> T
CutC.length (forall rate amplitude body. T rate amplitude body -> body
SigA.body Signal s amp sig
xs))