{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.Dimensional.ChunkySize.Cut (
splitAt, take, drop,
) 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 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 splitAt #-}
splitAt :: (CutC.Transform sig) =>
Size s ->
Signal s amp sig ->
(Signal s amp sig, Signal s amp sig)
splitAt :: forall sig s amp.
Transform sig =>
Size s -> Signal s amp sig -> (Signal s amp sig, Signal s amp sig)
splitAt =
\Size s
t Signal s amp sig
x ->
let (sig
y,sig
z) = forall sig. Transform sig => T -> sig -> (sig, sig)
CutC.splitAt (forall rate amplitude body. T rate amplitude body -> body
SigA.body Size s
t) forall a b. (a -> b) -> a -> b
$ forall rate amplitude body. T rate amplitude body -> body
SigA.body Signal s amp sig
x
in (forall sig1 rate amp sig0.
sig1 -> T rate amp sig0 -> T rate amp sig1
SigA.replaceBody sig
y Signal s amp sig
x,
forall sig1 rate amp sig0.
sig1 -> T rate amp sig0 -> T rate amp sig1
SigA.replaceBody sig
z Signal s amp sig
x)
{-# INLINE take #-}
take :: (CutC.Transform sig) =>
Size s ->
Signal s amp sig ->
Signal s amp sig
take :: forall sig s amp.
Transform sig =>
Size s -> Signal s amp sig -> Signal s amp sig
take =
\Size s
t -> forall sig0 sig1 rate amp.
(sig0 -> sig1) -> T rate amp sig0 -> T rate amp sig1
SigA.processBody (forall sig. Transform sig => T -> sig -> sig
CutC.take (forall rate amplitude body. T rate amplitude body -> body
SigA.body Size s
t))
{-# INLINE drop #-}
drop :: (CutC.Transform sig) =>
Size s ->
Signal s amp sig ->
Signal s amp sig
drop :: forall sig s amp.
Transform sig =>
Size s -> Signal s amp sig -> Signal s amp sig
drop =
\Size s
t -> forall sig0 sig1 rate amp.
(sig0 -> sig1) -> T rate amp sig0 -> T rate amp sig1
SigA.processBody (forall sig. Transform sig => T -> sig -> sig
CutC.drop (forall rate amplitude body. T rate amplitude body -> body
SigA.body Size s
t))