synthesizer-inference-0.2: src/Synthesizer/SampleRateContext/Rate.hs
{- |
Copyright : (c) Henning Thielemann 2008
License : GPL
Maintainer : synthesizer@henning-thielemann.de
Stability : provisional
Portability : requires multi-parameter type classes (OccasionallyScalar)
Light-weight sample parameter inference which will fit most needs.
We only do \"poor man's inference\", only for sample rates.
The sample rate will be provided as an argument of a special type 'T'.
This argument will almost never be passed explicitly
but handled operators analogous to '($)' and '(.)'.
In contrast to the run-time inference approach,
we have the static guarantee that the sample rate is fixed
before passing a signal to the outside world.
-}
module Synthesizer.SampleRateContext.Rate (
T(..),
fromNumber, toNumber,
loop, pure,
($:), ($::), ($^), ($#),
(.:), (.^),
liftP, liftP2, liftP3, liftP4,
) where
import Synthesizer.ApplicativeUtility
{-
import NumericPrelude
import PreludeBase as P
-}
{- |
This wraps a function which computes a sample rate dependent result.
Sample rate tells how many values per unit are stored
for representation of a signal.
-}
newtype T t t' = Cons {decons :: t'}
deriving (Eq, Ord, Show)
fromNumber :: t' -> T t t'
fromNumber = Cons
toNumber :: T t t' -> t'
toNumber = decons
pure :: a -> T t t' -> a
pure = const
{-
{- |
The first argument will be a function like 'Synthesizer.SampleRateContext.Signal.toTimeScalar'.
If you use this function instead of 'Synthesizer.SampleRateContext.Signal.toTimeScalar' directly,
the type @t@ can be automatically infered.
-}
convertTimeParam :: (t' -> t' -> t) -> t' -> (t -> a) -> T t t' -> a
convertTimeParam convert t' f = Cons $ \sr ->
f (convert sr t')
-}