module Synthesizer.Dimensional.Amplitude where

import qualified Number.DimensionTerm        as DN
import qualified Algebra.DimensionTerm       as Dim

{- |
Can be used as amplitude value in 'Synthesizer.Dimensional.Causal.Process.T'
or in 'Synthesizer.Dimensional.Abstraction.HomogeneousGen',
whenever the signal has no amplitude.
It would be a bad idea to omit the @Flat@ parameter
in 'Synthesizer.Dimensional.Causal.Process.applyFlat' routine,
since 'Synthesizer.Dimensional.Causal.Process.apply' can still be used
but the correspondence between amplitude type and sample type is lost.
-}
data Flat = Flat

{- |
This class is used to make 'Synthesizer.Dimensional.Causal.Process.mapAmplitude'
both flexible and a bit safe.
Its instances are dimensional numbers 'DN.T' and 'Flat'.
It should not be necessary to add more instances.
-}
class C amp where

instance C Flat where

instance Dim.C v => C (DN.T v y) where