{-# LANGUAGE NoImplicitPrelude #-} {- | Copyright : (c) Henning Thielemann 2009 License : GPL Maintainer : synthesizer@henning-thielemann.de Stability : provisional Portability : requires multi-parameter type classes -} module Synthesizer.Dimensional.ChunkySize.Signal ( store, length, ) where -- import qualified Synthesizer.Dimensional.Process as Proc 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 -- import qualified Number.DimensionTerm as DN -- import qualified Algebra.DimensionTerm as Dim -- import qualified Number.NonNegative as NonNeg -- import qualified Algebra.RealField as RealField -- import qualified Algebra.Field as Field -- import NumericPrelude hiding (negate) -- import PreludeBase as P import Prelude hiding (splitAt, take, drop, length, ) 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 = \cs -> SigA.processBody (SigC.fromState (SigA.body cs)) {- Move to a new module Analysis in order to be consistent with other Analysis modules? -} {-# INLINE length #-} length :: (CutC.Read sig) => Signal s amp sig -> Size s length = \xs -> SigA.abstractFromBody (CutC.length (SigA.body xs))