{-# Language TypeFamilies, FlexibleInstances, FlexibleContexts #-}
module Csound.Control.Overload.MidiInstr(
MidiInstr(..), MidiInstrTemp(..)
) where
import Data.Kind(Type)
import Csound.Typed
import Csound.Typed.Opcode
import Csound.Tuning
ampCps :: Msg -> (D, D)
ampCps :: Msg -> (D, D)
ampCps Msg
msg = (Msg -> D -> D
ampmidi Msg
msg D
1, Msg -> D
cpsmidi Msg
msg)
cpsmidi' :: Temp -> Msg -> D
cpsmidi' :: Temp -> Msg -> D
cpsmidi' (Temp Tab
t) Msg
msg = Msg -> Tab -> D
cpstmid Msg
msg Tab
t
ampCps' :: Temp -> Msg -> (D, D)
ampCps' :: Temp -> Msg -> (D, D)
ampCps' Temp
temp Msg
msg = (Msg -> D -> D
ampmidi Msg
msg D
1, Temp -> Msg -> D
cpsmidi' Temp
temp Msg
msg)
class MidiInstr a where
type MidiInstrOut a :: Type
onMsg :: a -> Msg -> SE (MidiInstrOut a)
instance MidiInstr (Msg -> Sig) where
type MidiInstrOut (Msg -> Sig) = Sig
onMsg :: (Msg -> Sig) -> Msg -> SE (MidiInstrOut (Msg -> Sig))
onMsg Msg -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> Sig
f
instance MidiInstr (Msg -> (Sig, Sig)) where
type MidiInstrOut (Msg -> (Sig, Sig)) = (Sig, Sig)
onMsg :: (Msg -> (Sig, Sig)) -> Msg -> SE (MidiInstrOut (Msg -> (Sig, Sig)))
onMsg Msg -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
f
instance MidiInstr (Msg -> (Sig, Sig, Sig)) where
type MidiInstrOut (Msg -> (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: (Msg -> (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (Msg -> (Sig, Sig, Sig)))
onMsg Msg -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig, Sig)
f
instance MidiInstr (Msg -> (Sig, Sig, Sig, Sig)) where
type MidiInstrOut (Msg -> (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: (Msg -> (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (Msg -> (Sig, Sig, Sig, Sig)))
onMsg Msg -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig, Sig, Sig)
f
instance MidiInstr (Msg -> SE Sig) where
type MidiInstrOut (Msg -> SE Sig) = Sig
onMsg :: (Msg -> SE Sig) -> Msg -> SE (MidiInstrOut (Msg -> SE Sig))
onMsg Msg -> SE Sig
f = Msg -> SE Sig
Msg -> SE (MidiInstrOut (Msg -> SE Sig))
f
instance MidiInstr (Msg -> SE (Sig, Sig)) where
type MidiInstrOut (Msg -> SE (Sig, Sig)) = (Sig, Sig)
onMsg :: (Msg -> SE (Sig, Sig))
-> Msg -> SE (MidiInstrOut (Msg -> SE (Sig, Sig)))
onMsg Msg -> SE (Sig, Sig)
f = Msg -> SE (Sig, Sig)
Msg -> SE (MidiInstrOut (Msg -> SE (Sig, Sig)))
f
instance MidiInstr (Msg -> SE (Sig, Sig, Sig)) where
type MidiInstrOut (Msg -> SE (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: (Msg -> SE (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (Msg -> SE (Sig, Sig, Sig)))
onMsg Msg -> SE (Sig, Sig, Sig)
f = Msg -> SE (Sig, Sig, Sig)
Msg -> SE (MidiInstrOut (Msg -> SE (Sig, Sig, Sig)))
f
instance MidiInstr (Msg -> SE (Sig, Sig, Sig, Sig)) where
type MidiInstrOut (Msg -> SE (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: (Msg -> SE (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (Msg -> SE (Sig, Sig, Sig, Sig)))
onMsg Msg -> SE (Sig, Sig, Sig, Sig)
f = Msg -> SE (Sig, Sig, Sig, Sig)
Msg -> SE (MidiInstrOut (Msg -> SE (Sig, Sig, Sig, Sig)))
f
sig2 :: Msg -> (Sig, Sig)
sig2 :: Msg -> (Sig, Sig)
sig2 Msg
msg = (D -> Sig
sig D
amp, D -> Sig
sig D
cps)
where (D
amp, D
cps) = Msg -> (D, D)
ampCps Msg
msg
instance MidiInstr ((Sig, Sig) -> Sig) where
type MidiInstrOut ((Sig, Sig) -> Sig) = Sig
onMsg :: ((Sig, Sig) -> Sig) -> Msg -> SE (MidiInstrOut ((Sig, Sig) -> Sig))
onMsg (Sig, Sig) -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> Sig
f ((Sig, Sig) -> Sig) -> (Msg -> (Sig, Sig)) -> Msg -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
sig2
instance MidiInstr ((Sig, Sig) -> (Sig, Sig)) where
type MidiInstrOut ((Sig, Sig) -> (Sig, Sig)) = (Sig, Sig)
onMsg :: ((Sig, Sig) -> (Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, Sig) -> (Sig, Sig)))
onMsg (Sig, Sig) -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
f ((Sig, Sig) -> (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
sig2
instance MidiInstr ((Sig, Sig) -> (Sig, Sig, Sig)) where
type MidiInstrOut ((Sig, Sig) -> (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: ((Sig, Sig) -> (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, Sig) -> (Sig, Sig, Sig)))
onMsg (Sig, Sig) -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig, Sig)
f ((Sig, Sig) -> (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
sig2
instance MidiInstr ((Sig, Sig) -> (Sig, Sig, Sig, Sig)) where
type MidiInstrOut ((Sig, Sig) -> (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: ((Sig, Sig) -> (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, Sig) -> (Sig, Sig, Sig, Sig)))
onMsg (Sig, Sig) -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig, Sig, Sig)
f ((Sig, Sig) -> (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
sig2
instance MidiInstr ((Sig, Sig) -> SE Sig) where
type MidiInstrOut ((Sig, Sig) -> SE Sig) = Sig
onMsg :: ((Sig, Sig) -> SE Sig)
-> Msg -> SE (MidiInstrOut ((Sig, Sig) -> SE Sig))
onMsg (Sig, Sig) -> SE Sig
f = (Sig, Sig) -> SE Sig
f ((Sig, Sig) -> SE Sig) -> (Msg -> (Sig, Sig)) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
sig2
instance MidiInstr ((Sig, Sig) -> SE (Sig, Sig)) where
type MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig)) = (Sig, Sig)
onMsg :: ((Sig, Sig) -> SE (Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig)))
onMsg (Sig, Sig) -> SE (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
f ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
sig2
instance MidiInstr ((Sig, Sig) -> SE (Sig, Sig, Sig)) where
type MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: ((Sig, Sig) -> SE (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig, Sig)))
onMsg (Sig, Sig) -> SE (Sig, Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig, Sig)
f ((Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
sig2
instance MidiInstr ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig)) where
type MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig)))
onMsg (Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
f ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, Sig)
sig2
dsig :: Msg -> (D, Sig)
dsig :: Msg -> (D, Sig)
dsig Msg
msg = (D
amp, D -> Sig
sig D
cps)
where (D
amp, D
cps) = Msg -> (D, D)
ampCps Msg
msg
instance MidiInstr ((D, Sig) -> Sig) where
type MidiInstrOut ((D, Sig) -> Sig) = Sig
onMsg :: ((D, Sig) -> Sig) -> Msg -> SE (MidiInstrOut ((D, Sig) -> Sig))
onMsg (D, Sig) -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, Sig) -> Sig
f ((D, Sig) -> Sig) -> (Msg -> (D, Sig)) -> Msg -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, Sig)
dsig
instance MidiInstr ((D, Sig) -> (Sig, Sig)) where
type MidiInstrOut ((D, Sig) -> (Sig, Sig)) = (Sig, Sig)
onMsg :: ((D, Sig) -> (Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, Sig) -> (Sig, Sig)))
onMsg (D, Sig) -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, Sig) -> (Sig, Sig)
f ((D, Sig) -> (Sig, Sig)) -> (Msg -> (D, Sig)) -> Msg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, Sig)
dsig
instance MidiInstr ((D, Sig) -> (Sig, Sig, Sig)) where
type MidiInstrOut ((D, Sig) -> (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: ((D, Sig) -> (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, Sig) -> (Sig, Sig, Sig)))
onMsg (D, Sig) -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, Sig) -> (Sig, Sig, Sig)
f ((D, Sig) -> (Sig, Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, Sig)
dsig
instance MidiInstr ((D, Sig) -> (Sig, Sig, Sig, Sig)) where
type MidiInstrOut ((D, Sig) -> (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: ((D, Sig) -> (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, Sig) -> (Sig, Sig, Sig, Sig)))
onMsg (D, Sig) -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, Sig) -> (Sig, Sig, Sig, Sig)
f ((D, Sig) -> (Sig, Sig, Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, Sig)
dsig
instance MidiInstr ((D, Sig) -> SE Sig) where
type MidiInstrOut ((D, Sig) -> SE Sig) = Sig
onMsg :: ((D, Sig) -> SE Sig)
-> Msg -> SE (MidiInstrOut ((D, Sig) -> SE Sig))
onMsg (D, Sig) -> SE Sig
f = (D, Sig) -> SE Sig
f ((D, Sig) -> SE Sig) -> (Msg -> (D, Sig)) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, Sig)
dsig
instance MidiInstr ((D, Sig) -> SE (Sig, Sig)) where
type MidiInstrOut ((D, Sig) -> SE (Sig, Sig)) = (Sig, Sig)
onMsg :: ((D, Sig) -> SE (Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, Sig) -> SE (Sig, Sig)))
onMsg (D, Sig) -> SE (Sig, Sig)
f = (D, Sig) -> SE (Sig, Sig)
f ((D, Sig) -> SE (Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, Sig)
dsig
instance MidiInstr ((D, Sig) -> SE (Sig, Sig, Sig)) where
type MidiInstrOut ((D, Sig) -> SE (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: ((D, Sig) -> SE (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, Sig) -> SE (Sig, Sig, Sig)))
onMsg (D, Sig) -> SE (Sig, Sig, Sig)
f = (D, Sig) -> SE (Sig, Sig, Sig)
f ((D, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, Sig)
dsig
instance MidiInstr ((D, Sig) -> SE (Sig, Sig, Sig, Sig)) where
type MidiInstrOut ((D, Sig) -> SE (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: ((D, Sig) -> SE (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, Sig) -> SE (Sig, Sig, Sig, Sig)))
onMsg (D, Sig) -> SE (Sig, Sig, Sig, Sig)
f = (D, Sig) -> SE (Sig, Sig, Sig, Sig)
f ((D, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, Sig)
dsig
sigd :: Msg -> (Sig, D)
sigd :: Msg -> (Sig, D)
sigd Msg
msg = (D -> Sig
sig D
amp, D
cps)
where (D
amp, D
cps) = Msg -> (D, D)
ampCps Msg
msg
instance MidiInstr ((Sig, D) -> Sig) where
type MidiInstrOut ((Sig, D) -> Sig) = Sig
onMsg :: ((Sig, D) -> Sig) -> Msg -> SE (MidiInstrOut ((Sig, D) -> Sig))
onMsg (Sig, D) -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, D) -> Sig
f ((Sig, D) -> Sig) -> (Msg -> (Sig, D)) -> Msg -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, D)
sigd
instance MidiInstr ((Sig, D) -> (Sig, Sig)) where
type MidiInstrOut ((Sig, D) -> (Sig, Sig)) = (Sig, Sig)
onMsg :: ((Sig, D) -> (Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, D) -> (Sig, Sig)))
onMsg (Sig, D) -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, D) -> (Sig, Sig)
f ((Sig, D) -> (Sig, Sig)) -> (Msg -> (Sig, D)) -> Msg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, D)
sigd
instance MidiInstr ((Sig, D) -> (Sig, Sig, Sig)) where
type MidiInstrOut ((Sig, D) -> (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: ((Sig, D) -> (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, D) -> (Sig, Sig, Sig)))
onMsg (Sig, D) -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, D) -> (Sig, Sig, Sig)
f ((Sig, D) -> (Sig, Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, D)
sigd
instance MidiInstr ((Sig, D) -> (Sig, Sig, Sig, Sig)) where
type MidiInstrOut ((Sig, D) -> (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: ((Sig, D) -> (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, D) -> (Sig, Sig, Sig, Sig)))
onMsg (Sig, D) -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, D) -> (Sig, Sig, Sig, Sig)
f ((Sig, D) -> (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, D)
sigd
instance MidiInstr ((Sig, D) -> SE Sig) where
type MidiInstrOut ((Sig, D) -> SE Sig) = Sig
onMsg :: ((Sig, D) -> SE Sig)
-> Msg -> SE (MidiInstrOut ((Sig, D) -> SE Sig))
onMsg (Sig, D) -> SE Sig
f = (Sig, D) -> SE Sig
f ((Sig, D) -> SE Sig) -> (Msg -> (Sig, D)) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, D)
sigd
instance MidiInstr ((Sig, D) -> SE (Sig, Sig)) where
type MidiInstrOut ((Sig, D) -> SE (Sig, Sig)) = (Sig, Sig)
onMsg :: ((Sig, D) -> SE (Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, D) -> SE (Sig, Sig)))
onMsg (Sig, D) -> SE (Sig, Sig)
f = (Sig, D) -> SE (Sig, Sig)
f ((Sig, D) -> SE (Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, D)
sigd
instance MidiInstr ((Sig, D) -> SE (Sig, Sig, Sig)) where
type MidiInstrOut ((Sig, D) -> SE (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: ((Sig, D) -> SE (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, D) -> SE (Sig, Sig, Sig)))
onMsg (Sig, D) -> SE (Sig, Sig, Sig)
f = (Sig, D) -> SE (Sig, Sig, Sig)
f ((Sig, D) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, D)
sigd
instance MidiInstr ((Sig, D) -> SE (Sig, Sig, Sig, Sig)) where
type MidiInstrOut ((Sig, D) -> SE (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: ((Sig, D) -> SE (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((Sig, D) -> SE (Sig, Sig, Sig, Sig)))
onMsg (Sig, D) -> SE (Sig, Sig, Sig, Sig)
f = (Sig, D) -> SE (Sig, Sig, Sig, Sig)
f ((Sig, D) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (Sig, D)
sigd
d2 :: Msg -> (D, D)
d2 :: Msg -> (D, D)
d2 = Msg -> (D, D)
ampCps
instance MidiInstr ((D, D) -> Sig) where
type MidiInstrOut ((D, D) -> Sig) = Sig
onMsg :: ((D, D) -> Sig) -> Msg -> SE (MidiInstrOut ((D, D) -> Sig))
onMsg (D, D) -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, D) -> Sig
f ((D, D) -> Sig) -> (Msg -> (D, D)) -> Msg -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, D)
d2
instance MidiInstr ((D, D) -> (Sig, Sig)) where
type MidiInstrOut ((D, D) -> (Sig, Sig)) = (Sig, Sig)
onMsg :: ((D, D) -> (Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, D) -> (Sig, Sig)))
onMsg (D, D) -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, D) -> (Sig, Sig)
f ((D, D) -> (Sig, Sig)) -> (Msg -> (D, D)) -> Msg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, D)
d2
instance MidiInstr ((D, D) -> (Sig, Sig, Sig)) where
type MidiInstrOut ((D, D) -> (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: ((D, D) -> (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, D) -> (Sig, Sig, Sig)))
onMsg (D, D) -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, D) -> (Sig, Sig, Sig)
f ((D, D) -> (Sig, Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, D)
d2
instance MidiInstr ((D, D) -> (Sig, Sig, Sig, Sig)) where
type MidiInstrOut ((D, D) -> (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: ((D, D) -> (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, D) -> (Sig, Sig, Sig, Sig)))
onMsg (D, D) -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, D) -> (Sig, Sig, Sig, Sig)
f ((D, D) -> (Sig, Sig, Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, D)
d2
instance MidiInstr ((D, D) -> SE Sig) where
type MidiInstrOut ((D, D) -> SE Sig) = Sig
onMsg :: ((D, D) -> SE Sig) -> Msg -> SE (MidiInstrOut ((D, D) -> SE Sig))
onMsg (D, D) -> SE Sig
f = (D, D) -> SE Sig
f ((D, D) -> SE Sig) -> (Msg -> (D, D)) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, D)
d2
instance MidiInstr ((D, D) -> SE (Sig, Sig)) where
type MidiInstrOut ((D, D) -> SE (Sig, Sig)) = (Sig, Sig)
onMsg :: ((D, D) -> SE (Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, D) -> SE (Sig, Sig)))
onMsg (D, D) -> SE (Sig, Sig)
f = (D, D) -> SE (Sig, Sig)
f ((D, D) -> SE (Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, D)
d2
instance MidiInstr ((D, D) -> SE (Sig, Sig, Sig)) where
type MidiInstrOut ((D, D) -> SE (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: ((D, D) -> SE (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, D) -> SE (Sig, Sig, Sig)))
onMsg (D, D) -> SE (Sig, Sig, Sig)
f = (D, D) -> SE (Sig, Sig, Sig)
f ((D, D) -> SE (Sig, Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, D)
d2
instance MidiInstr ((D, D) -> SE (Sig, Sig, Sig, Sig)) where
type MidiInstrOut ((D, D) -> SE (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: ((D, D) -> SE (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut ((D, D) -> SE (Sig, Sig, Sig, Sig)))
onMsg (D, D) -> SE (Sig, Sig, Sig, Sig)
f = (D, D) -> SE (Sig, Sig, Sig, Sig)
f ((D, D) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Msg -> (D, D)
d2
instance MidiInstr (Sig -> Sig) where
type MidiInstrOut (Sig -> Sig) = Sig
onMsg :: (Sig -> Sig) -> Msg -> SE (MidiInstrOut (Sig -> Sig))
onMsg Sig -> Sig
f Msg
msg = MidiInstrOut (Sig -> Sig) -> SE (MidiInstrOut (Sig -> Sig))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (Sig -> Sig) -> SE (MidiInstrOut (Sig -> Sig)))
-> MidiInstrOut (Sig -> Sig) -> SE (MidiInstrOut (Sig -> Sig))
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
f (D -> Sig
sig (Msg -> D
cpsmidi Msg
msg))
instance MidiInstr (Sig -> (Sig, Sig)) where
type MidiInstrOut (Sig -> (Sig, Sig)) = (Sig, Sig)
onMsg :: (Sig -> (Sig, Sig)) -> Msg -> SE (MidiInstrOut (Sig -> (Sig, Sig)))
onMsg Sig -> (Sig, Sig)
f Msg
msg = MidiInstrOut (Sig -> (Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (Sig -> (Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig))))
-> MidiInstrOut (Sig -> (Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2)
where (Sig
a1, Sig
a2) = Sig -> (Sig, Sig)
f (D -> Sig
sig (Msg -> D
cpsmidi Msg
msg))
instance MidiInstr (Sig -> (Sig, Sig, Sig)) where
type MidiInstrOut (Sig -> (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: (Sig -> (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig)))
onMsg Sig -> (Sig, Sig, Sig)
f Msg
msg = MidiInstrOut (Sig -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (Sig -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig))))
-> MidiInstrOut (Sig -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3)
where (Sig
a1, Sig
a2, Sig
a3) = Sig -> (Sig, Sig, Sig)
f (D -> Sig
sig (Msg -> D
cpsmidi Msg
msg))
instance MidiInstr (Sig -> (Sig, Sig, Sig, Sig)) where
type MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: (Sig -> (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig)))
onMsg Sig -> (Sig, Sig, Sig, Sig)
f Msg
msg = MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig))))
-> MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a4)
where (Sig
a1, Sig
a2, Sig
a3, Sig
a4) = Sig -> (Sig, Sig, Sig, Sig)
f (D -> Sig
sig (Msg -> D
cpsmidi Msg
msg))
instance MidiInstr (Sig -> SE Sig) where
type MidiInstrOut (Sig -> SE Sig) = Sig
onMsg :: (Sig -> SE Sig) -> Msg -> SE (MidiInstrOut (Sig -> SE Sig))
onMsg Sig -> SE Sig
f Msg
msg = do
Sig
a1 <- Sig -> SE Sig
f (D -> Sig
sig (Msg -> D
cpsmidi Msg
msg))
Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1
instance MidiInstr (Sig -> SE (Sig, Sig)) where
type MidiInstrOut (Sig -> SE (Sig, Sig)) = (Sig, Sig)
onMsg :: (Sig -> SE (Sig, Sig))
-> Msg -> SE (MidiInstrOut (Sig -> SE (Sig, Sig)))
onMsg Sig -> SE (Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2) <- Sig -> SE (Sig, Sig)
f (D -> Sig
sig (Msg -> D
cpsmidi Msg
msg))
(Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2)
instance MidiInstr (Sig -> SE (Sig, Sig, Sig)) where
type MidiInstrOut (Sig -> SE (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: (Sig -> SE (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (Sig -> SE (Sig, Sig, Sig)))
onMsg Sig -> SE (Sig, Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2, Sig
a3) <- Sig -> SE (Sig, Sig, Sig)
f (D -> Sig
sig (Msg -> D
cpsmidi Msg
msg))
(Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3)
instance MidiInstr (Sig -> SE (Sig, Sig, Sig, Sig)) where
type MidiInstrOut (Sig -> SE (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: (Sig -> SE (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (Sig -> SE (Sig, Sig, Sig, Sig)))
onMsg Sig -> SE (Sig, Sig, Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2, Sig
a3, Sig
a4) <- Sig -> SE (Sig, Sig, Sig, Sig)
f (D -> Sig
sig (Msg -> D
cpsmidi Msg
msg))
(Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a4)
instance MidiInstr (D -> Sig) where
type MidiInstrOut (D -> Sig) = Sig
onMsg :: (D -> Sig) -> Msg -> SE (MidiInstrOut (D -> Sig))
onMsg D -> Sig
f Msg
msg = MidiInstrOut (D -> Sig) -> SE (MidiInstrOut (D -> Sig))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (D -> Sig) -> SE (MidiInstrOut (D -> Sig)))
-> MidiInstrOut (D -> Sig) -> SE (MidiInstrOut (D -> Sig))
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
f (Msg -> D
cpsmidi Msg
msg)
instance MidiInstr (D -> (Sig, Sig)) where
type MidiInstrOut (D -> (Sig, Sig)) = (Sig, Sig)
onMsg :: (D -> (Sig, Sig)) -> Msg -> SE (MidiInstrOut (D -> (Sig, Sig)))
onMsg D -> (Sig, Sig)
f Msg
msg = MidiInstrOut (D -> (Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (D -> (Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig))))
-> MidiInstrOut (D -> (Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2)
where (Sig
a1, Sig
a2) = D -> (Sig, Sig)
f (Msg -> D
cpsmidi Msg
msg)
instance MidiInstr (D -> (Sig, Sig, Sig)) where
type MidiInstrOut (D -> (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: (D -> (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (D -> (Sig, Sig, Sig)))
onMsg D -> (Sig, Sig, Sig)
f Msg
msg = MidiInstrOut (D -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (D -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig))))
-> MidiInstrOut (D -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3)
where (Sig
a1, Sig
a2, Sig
a3) = D -> (Sig, Sig, Sig)
f (Msg -> D
cpsmidi Msg
msg)
instance MidiInstr (D -> (Sig, Sig, Sig, Sig)) where
type MidiInstrOut (D -> (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: (D -> (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (D -> (Sig, Sig, Sig, Sig)))
onMsg D -> (Sig, Sig, Sig, Sig)
f Msg
msg = MidiInstrOut (D -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (D -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig, Sig))))
-> MidiInstrOut (D -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a4)
where (Sig
a1, Sig
a2, Sig
a3, Sig
a4) = D -> (Sig, Sig, Sig, Sig)
f (Msg -> D
cpsmidi Msg
msg)
instance MidiInstr (D -> SE Sig) where
type MidiInstrOut (D -> SE Sig) = Sig
onMsg :: (D -> SE Sig) -> Msg -> SE (MidiInstrOut (D -> SE Sig))
onMsg D -> SE Sig
f Msg
msg = do
Sig
a1 <- D -> SE Sig
f ((Msg -> D
cpsmidi Msg
msg))
Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1
instance MidiInstr (D -> SE (Sig, Sig)) where
type MidiInstrOut (D -> SE (Sig, Sig)) = (Sig, Sig)
onMsg :: (D -> SE (Sig, Sig))
-> Msg -> SE (MidiInstrOut (D -> SE (Sig, Sig)))
onMsg D -> SE (Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2) <- D -> SE (Sig, Sig)
f ((Msg -> D
cpsmidi Msg
msg))
(Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2)
instance MidiInstr (D -> SE (Sig, Sig, Sig)) where
type MidiInstrOut (D -> SE (Sig, Sig, Sig)) = (Sig, Sig, Sig)
onMsg :: (D -> SE (Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (D -> SE (Sig, Sig, Sig)))
onMsg D -> SE (Sig, Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2, Sig
a3) <- D -> SE (Sig, Sig, Sig)
f ((Msg -> D
cpsmidi Msg
msg))
(Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3)
instance MidiInstr (D -> SE (Sig, Sig, Sig, Sig)) where
type MidiInstrOut (D -> SE (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
onMsg :: (D -> SE (Sig, Sig, Sig, Sig))
-> Msg -> SE (MidiInstrOut (D -> SE (Sig, Sig, Sig, Sig)))
onMsg D -> SE (Sig, Sig, Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2, Sig
a3, Sig
a4) <- D -> SE (Sig, Sig, Sig, Sig)
f ((Msg -> D
cpsmidi Msg
msg))
(Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a4)
class MidiInstr a => MidiInstrTemp a where
onMsg' :: Temp -> a -> Msg -> SE (MidiInstrOut a)
sig2' :: Temp -> Msg -> (Sig, Sig)
sig2' :: Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm Msg
msg = (D -> Sig
sig D
amp, D -> Sig
sig D
cps)
where (D
amp, D
cps) = Temp -> Msg -> (D, D)
ampCps' Temp
tm Msg
msg
instance MidiInstrTemp ((Sig, Sig) -> Sig) where
onMsg' :: Temp
-> ((Sig, Sig) -> Sig)
-> Msg
-> SE (MidiInstrOut ((Sig, Sig) -> Sig))
onMsg' Temp
tm (Sig, Sig) -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> Sig
f ((Sig, Sig) -> Sig) -> (Msg -> (Sig, Sig)) -> Msg -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm
instance MidiInstrTemp ((Sig, Sig) -> (Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, Sig) -> (Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, Sig) -> (Sig, Sig)))
onMsg' Temp
tm (Sig, Sig) -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
f ((Sig, Sig) -> (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm
instance MidiInstrTemp ((Sig, Sig) -> (Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, Sig) -> (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, Sig) -> (Sig, Sig, Sig)))
onMsg' Temp
tm (Sig, Sig) -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig, Sig)
f ((Sig, Sig) -> (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm
instance MidiInstrTemp ((Sig, Sig) -> (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, Sig) -> (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, Sig) -> (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm (Sig, Sig) -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig, Sig, Sig)
f ((Sig, Sig) -> (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm
instance MidiInstrTemp ((Sig, Sig) -> SE Sig) where
onMsg' :: Temp
-> ((Sig, Sig) -> SE Sig)
-> Msg
-> SE (MidiInstrOut ((Sig, Sig) -> SE Sig))
onMsg' Temp
tm (Sig, Sig) -> SE Sig
f = (Sig, Sig) -> SE Sig
f ((Sig, Sig) -> SE Sig) -> (Msg -> (Sig, Sig)) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm
instance MidiInstrTemp ((Sig, Sig) -> SE (Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, Sig) -> SE (Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig)))
onMsg' Temp
tm (Sig, Sig) -> SE (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
f ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm
instance MidiInstrTemp ((Sig, Sig) -> SE (Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, Sig) -> SE (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig, Sig)))
onMsg' Temp
tm (Sig, Sig) -> SE (Sig, Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig, Sig)
f ((Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm
instance MidiInstrTemp ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm (Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
f ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, Sig)
sig2' Temp
tm
dsig' :: Temp -> Msg -> (D, Sig)
dsig' :: Temp -> Msg -> (D, Sig)
dsig' Temp
tm Msg
msg = (D
amp, D -> Sig
sig D
cps)
where (D
amp, D
cps) = Temp -> Msg -> (D, D)
ampCps' Temp
tm Msg
msg
instance MidiInstrTemp ((D, Sig) -> Sig) where
onMsg' :: Temp
-> ((D, Sig) -> Sig) -> Msg -> SE (MidiInstrOut ((D, Sig) -> Sig))
onMsg' Temp
tm (D, Sig) -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, Sig) -> Sig
f ((D, Sig) -> Sig) -> (Msg -> (D, Sig)) -> Msg -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, Sig)
dsig' Temp
tm
instance MidiInstrTemp ((D, Sig) -> (Sig, Sig)) where
onMsg' :: Temp
-> ((D, Sig) -> (Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, Sig) -> (Sig, Sig)))
onMsg' Temp
tm (D, Sig) -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, Sig) -> (Sig, Sig)
f ((D, Sig) -> (Sig, Sig)) -> (Msg -> (D, Sig)) -> Msg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, Sig)
dsig' Temp
tm
instance MidiInstrTemp ((D, Sig) -> (Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((D, Sig) -> (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, Sig) -> (Sig, Sig, Sig)))
onMsg' Temp
tm (D, Sig) -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, Sig) -> (Sig, Sig, Sig)
f ((D, Sig) -> (Sig, Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, Sig)
dsig' Temp
tm
instance MidiInstrTemp ((D, Sig) -> (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((D, Sig) -> (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, Sig) -> (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm (D, Sig) -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, Sig) -> (Sig, Sig, Sig, Sig)
f ((D, Sig) -> (Sig, Sig, Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, Sig)
dsig' Temp
tm
instance MidiInstrTemp ((D, Sig) -> SE Sig) where
onMsg' :: Temp
-> ((D, Sig) -> SE Sig)
-> Msg
-> SE (MidiInstrOut ((D, Sig) -> SE Sig))
onMsg' Temp
tm (D, Sig) -> SE Sig
f = (D, Sig) -> SE Sig
f ((D, Sig) -> SE Sig) -> (Msg -> (D, Sig)) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, Sig)
dsig' Temp
tm
instance MidiInstrTemp ((D, Sig) -> SE (Sig, Sig)) where
onMsg' :: Temp
-> ((D, Sig) -> SE (Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, Sig) -> SE (Sig, Sig)))
onMsg' Temp
tm (D, Sig) -> SE (Sig, Sig)
f = (D, Sig) -> SE (Sig, Sig)
f ((D, Sig) -> SE (Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, Sig)
dsig' Temp
tm
instance MidiInstrTemp ((D, Sig) -> SE (Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((D, Sig) -> SE (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, Sig) -> SE (Sig, Sig, Sig)))
onMsg' Temp
tm (D, Sig) -> SE (Sig, Sig, Sig)
f = (D, Sig) -> SE (Sig, Sig, Sig)
f ((D, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, Sig)
dsig' Temp
tm
instance MidiInstrTemp ((D, Sig) -> SE (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((D, Sig) -> SE (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, Sig) -> SE (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm (D, Sig) -> SE (Sig, Sig, Sig, Sig)
f = (D, Sig) -> SE (Sig, Sig, Sig, Sig)
f ((D, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (D, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, Sig)
dsig' Temp
tm
sigd' :: Temp -> Msg -> (Sig, D)
sigd' :: Temp -> Msg -> (Sig, D)
sigd' Temp
tm Msg
msg = (D -> Sig
sig D
amp, D
cps)
where (D
amp, D
cps) = Temp -> Msg -> (D, D)
ampCps' Temp
tm Msg
msg
instance MidiInstrTemp ((Sig, D) -> Sig) where
onMsg' :: Temp
-> ((Sig, D) -> Sig) -> Msg -> SE (MidiInstrOut ((Sig, D) -> Sig))
onMsg' Temp
tm (Sig, D) -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, D) -> Sig
f ((Sig, D) -> Sig) -> (Msg -> (Sig, D)) -> Msg -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, D)
sigd' Temp
tm
instance MidiInstrTemp ((Sig, D) -> (Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, D) -> (Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, D) -> (Sig, Sig)))
onMsg' Temp
tm (Sig, D) -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, D) -> (Sig, Sig)
f ((Sig, D) -> (Sig, Sig)) -> (Msg -> (Sig, D)) -> Msg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, D)
sigd' Temp
tm
instance MidiInstrTemp ((Sig, D) -> (Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, D) -> (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, D) -> (Sig, Sig, Sig)))
onMsg' Temp
tm (Sig, D) -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, D) -> (Sig, Sig, Sig)
f ((Sig, D) -> (Sig, Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, D)
sigd' Temp
tm
instance MidiInstrTemp ((Sig, D) -> (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, D) -> (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, D) -> (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm (Sig, D) -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, D) -> (Sig, Sig, Sig, Sig)
f ((Sig, D) -> (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, D)
sigd' Temp
tm
instance MidiInstrTemp ((Sig, D) -> SE Sig) where
onMsg' :: Temp
-> ((Sig, D) -> SE Sig)
-> Msg
-> SE (MidiInstrOut ((Sig, D) -> SE Sig))
onMsg' Temp
tm (Sig, D) -> SE Sig
f = (Sig, D) -> SE Sig
f ((Sig, D) -> SE Sig) -> (Msg -> (Sig, D)) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, D)
sigd' Temp
tm
instance MidiInstrTemp ((Sig, D) -> SE (Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, D) -> SE (Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, D) -> SE (Sig, Sig)))
onMsg' Temp
tm (Sig, D) -> SE (Sig, Sig)
f = (Sig, D) -> SE (Sig, Sig)
f ((Sig, D) -> SE (Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, D)
sigd' Temp
tm
instance MidiInstrTemp ((Sig, D) -> SE (Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, D) -> SE (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, D) -> SE (Sig, Sig, Sig)))
onMsg' Temp
tm (Sig, D) -> SE (Sig, Sig, Sig)
f = (Sig, D) -> SE (Sig, Sig, Sig)
f ((Sig, D) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, D)
sigd' Temp
tm
instance MidiInstrTemp ((Sig, D) -> SE (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((Sig, D) -> SE (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((Sig, D) -> SE (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm (Sig, D) -> SE (Sig, Sig, Sig, Sig)
f = (Sig, D) -> SE (Sig, Sig, Sig, Sig)
f ((Sig, D) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, D)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (Sig, D)
sigd' Temp
tm
d2' :: Temp -> Msg -> (D, D)
d2' :: Temp -> Msg -> (D, D)
d2' Temp
tm = Temp -> Msg -> (D, D)
ampCps' Temp
tm
instance MidiInstrTemp ((D, D) -> Sig) where
onMsg' :: Temp -> ((D, D) -> Sig) -> Msg -> SE (MidiInstrOut ((D, D) -> Sig))
onMsg' Temp
tm (D, D) -> Sig
f = Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> (Msg -> Sig) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, D) -> Sig
f ((D, D) -> Sig) -> (Msg -> (D, D)) -> Msg -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, D)
d2' Temp
tm
instance MidiInstrTemp ((D, D) -> (Sig, Sig)) where
onMsg' :: Temp
-> ((D, D) -> (Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, D) -> (Sig, Sig)))
onMsg' Temp
tm (D, D) -> (Sig, Sig)
f = (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Msg -> (Sig, Sig)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, D) -> (Sig, Sig)
f ((D, D) -> (Sig, Sig)) -> (Msg -> (D, D)) -> Msg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, D)
d2' Temp
tm
instance MidiInstrTemp ((D, D) -> (Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((D, D) -> (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, D) -> (Sig, Sig, Sig)))
onMsg' Temp
tm (D, D) -> (Sig, Sig, Sig)
f = (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, D) -> (Sig, Sig, Sig)
f ((D, D) -> (Sig, Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, D)
d2' Temp
tm
instance MidiInstrTemp ((D, D) -> (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((D, D) -> (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, D) -> (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm (D, D) -> (Sig, Sig, Sig, Sig)
f = (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (Sig, Sig, Sig, Sig)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D, D) -> (Sig, Sig, Sig, Sig)
f ((D, D) -> (Sig, Sig, Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, D)
d2' Temp
tm
instance MidiInstrTemp ((D, D) -> SE Sig) where
onMsg' :: Temp
-> ((D, D) -> SE Sig)
-> Msg
-> SE (MidiInstrOut ((D, D) -> SE Sig))
onMsg' Temp
tm (D, D) -> SE Sig
f = (D, D) -> SE Sig
f ((D, D) -> SE Sig) -> (Msg -> (D, D)) -> Msg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, D)
d2' Temp
tm
instance MidiInstrTemp ((D, D) -> SE (Sig, Sig)) where
onMsg' :: Temp
-> ((D, D) -> SE (Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, D) -> SE (Sig, Sig)))
onMsg' Temp
tm (D, D) -> SE (Sig, Sig)
f = (D, D) -> SE (Sig, Sig)
f ((D, D) -> SE (Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, D)
d2' Temp
tm
instance MidiInstrTemp ((D, D) -> SE (Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((D, D) -> SE (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, D) -> SE (Sig, Sig, Sig)))
onMsg' Temp
tm (D, D) -> SE (Sig, Sig, Sig)
f = (D, D) -> SE (Sig, Sig, Sig)
f ((D, D) -> SE (Sig, Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> SE (Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, D)
d2' Temp
tm
instance MidiInstrTemp ((D, D) -> SE (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> ((D, D) -> SE (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut ((D, D) -> SE (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm (D, D) -> SE (Sig, Sig, Sig, Sig)
f = (D, D) -> SE (Sig, Sig, Sig, Sig)
f ((D, D) -> SE (Sig, Sig, Sig, Sig))
-> (Msg -> (D, D)) -> Msg -> SE (Sig, Sig, Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Temp -> Msg -> (D, D)
d2' Temp
tm
instance MidiInstrTemp (Sig -> Sig) where
onMsg' :: Temp -> (Sig -> Sig) -> Msg -> SE (MidiInstrOut (Sig -> Sig))
onMsg' Temp
tm Sig -> Sig
f Msg
msg = MidiInstrOut (Sig -> Sig) -> SE (MidiInstrOut (Sig -> Sig))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (Sig -> Sig) -> SE (MidiInstrOut (Sig -> Sig)))
-> MidiInstrOut (Sig -> Sig) -> SE (MidiInstrOut (Sig -> Sig))
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
f (D -> Sig
sig (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
instance MidiInstrTemp (Sig -> (Sig, Sig)) where
onMsg' :: Temp
-> (Sig -> (Sig, Sig))
-> Msg
-> SE (MidiInstrOut (Sig -> (Sig, Sig)))
onMsg' Temp
tm Sig -> (Sig, Sig)
f Msg
msg = MidiInstrOut (Sig -> (Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (Sig -> (Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig))))
-> MidiInstrOut (Sig -> (Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2)
where (Sig
a1, Sig
a2) = Sig -> (Sig, Sig)
f (D -> Sig
sig (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
instance MidiInstrTemp (Sig -> (Sig, Sig, Sig)) where
onMsg' :: Temp
-> (Sig -> (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig)))
onMsg' Temp
tm Sig -> (Sig, Sig, Sig)
f Msg
msg = MidiInstrOut (Sig -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (Sig -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig))))
-> MidiInstrOut (Sig -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3)
where (Sig
a1, Sig
a2, Sig
a3) = Sig -> (Sig, Sig, Sig)
f (D -> Sig
sig (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
instance MidiInstrTemp (Sig -> (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> (Sig -> (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm Sig -> (Sig, Sig, Sig, Sig)
f Msg
msg = MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig))))
-> MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (Sig -> (Sig, Sig, Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a4)
where (Sig
a1, Sig
a2, Sig
a3, Sig
a4) = Sig -> (Sig, Sig, Sig, Sig)
f (D -> Sig
sig (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
instance MidiInstrTemp (Sig -> SE Sig) where
onMsg' :: Temp -> (Sig -> SE Sig) -> Msg -> SE (MidiInstrOut (Sig -> SE Sig))
onMsg' Temp
tm Sig -> SE Sig
f Msg
msg = do
Sig
a1 <- Sig -> SE Sig
f (D -> Sig
sig (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1
instance MidiInstrTemp (Sig -> SE (Sig, Sig)) where
onMsg' :: Temp
-> (Sig -> SE (Sig, Sig))
-> Msg
-> SE (MidiInstrOut (Sig -> SE (Sig, Sig)))
onMsg' Temp
tm Sig -> SE (Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2) <- Sig -> SE (Sig, Sig)
f (D -> Sig
sig (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
(Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2)
instance MidiInstrTemp (Sig -> SE (Sig, Sig, Sig)) where
onMsg' :: Temp
-> (Sig -> SE (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut (Sig -> SE (Sig, Sig, Sig)))
onMsg' Temp
tm Sig -> SE (Sig, Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2, Sig
a3) <- Sig -> SE (Sig, Sig, Sig)
f (D -> Sig
sig (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
(Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3)
instance MidiInstrTemp (Sig -> SE (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> (Sig -> SE (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut (Sig -> SE (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm Sig -> SE (Sig, Sig, Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2, Sig
a3, Sig
a4) <- Sig -> SE (Sig, Sig, Sig, Sig)
f (D -> Sig
sig (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
(Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a4)
instance MidiInstrTemp (D -> Sig) where
onMsg' :: Temp -> (D -> Sig) -> Msg -> SE (MidiInstrOut (D -> Sig))
onMsg' Temp
tm D -> Sig
f Msg
msg = MidiInstrOut (D -> Sig) -> SE (MidiInstrOut (D -> Sig))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (D -> Sig) -> SE (MidiInstrOut (D -> Sig)))
-> MidiInstrOut (D -> Sig) -> SE (MidiInstrOut (D -> Sig))
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
f (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg)
instance MidiInstrTemp (D -> (Sig, Sig)) where
onMsg' :: Temp
-> (D -> (Sig, Sig)) -> Msg -> SE (MidiInstrOut (D -> (Sig, Sig)))
onMsg' Temp
tm D -> (Sig, Sig)
f Msg
msg = MidiInstrOut (D -> (Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (D -> (Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig))))
-> MidiInstrOut (D -> (Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2)
where (Sig
a1, Sig
a2) = D -> (Sig, Sig)
f (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg)
instance MidiInstrTemp (D -> (Sig, Sig, Sig)) where
onMsg' :: Temp
-> (D -> (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig)))
onMsg' Temp
tm D -> (Sig, Sig, Sig)
f Msg
msg = MidiInstrOut (D -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (D -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig))))
-> MidiInstrOut (D -> (Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3)
where (Sig
a1, Sig
a2, Sig
a3) = D -> (Sig, Sig, Sig)
f (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg)
instance MidiInstrTemp (D -> (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> (D -> (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm D -> (Sig, Sig, Sig, Sig)
f Msg
msg = MidiInstrOut (D -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig, Sig)))
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (MidiInstrOut (D -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig, Sig))))
-> MidiInstrOut (D -> (Sig, Sig, Sig, Sig))
-> SE (MidiInstrOut (D -> (Sig, Sig, Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a4)
where (Sig
a1, Sig
a2, Sig
a3, Sig
a4) = D -> (Sig, Sig, Sig, Sig)
f (Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg)
instance MidiInstrTemp (D -> SE Sig) where
onMsg' :: Temp -> (D -> SE Sig) -> Msg -> SE (MidiInstrOut (D -> SE Sig))
onMsg' Temp
tm D -> SE Sig
f Msg
msg = do
Sig
a1 <- D -> SE Sig
f ((Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1
instance MidiInstrTemp (D -> SE (Sig, Sig)) where
onMsg' :: Temp
-> (D -> SE (Sig, Sig))
-> Msg
-> SE (MidiInstrOut (D -> SE (Sig, Sig)))
onMsg' Temp
tm D -> SE (Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2) <- D -> SE (Sig, Sig)
f ((Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
(Sig, Sig) -> SE (Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2)
instance MidiInstrTemp (D -> SE (Sig, Sig, Sig)) where
onMsg' :: Temp
-> (D -> SE (Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut (D -> SE (Sig, Sig, Sig)))
onMsg' Temp
tm D -> SE (Sig, Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2, Sig
a3) <- D -> SE (Sig, Sig, Sig)
f ((Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
(Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig) -> SE (Sig, Sig, Sig))
-> (Sig, Sig, Sig) -> SE (Sig, Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3)
instance MidiInstrTemp (D -> SE (Sig, Sig, Sig, Sig)) where
onMsg' :: Temp
-> (D -> SE (Sig, Sig, Sig, Sig))
-> Msg
-> SE (MidiInstrOut (D -> SE (Sig, Sig, Sig, Sig)))
onMsg' Temp
tm D -> SE (Sig, Sig, Sig, Sig)
f Msg
msg = do
(Sig
a1, Sig
a2, Sig
a3, Sig
a4) <- D -> SE (Sig, Sig, Sig, Sig)
f ((Temp -> Msg -> D
cpsmidi' Temp
tm Msg
msg))
(Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig))
-> (Sig, Sig, Sig, Sig) -> SE (Sig, Sig, Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a3, D -> Sig
sig (Msg -> D -> D
ampmidi Msg
msg D
1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a4)