module Csound.Control.Overload.Outs(
Outs(..), onArg
) where
import Csound.Typed
onArg :: Outs b => (a -> b) -> (a -> SE (SigOuts b))
onArg f = toOuts . f
class Sigs (SigOuts a) => Outs a where
type SigOuts a :: *
toOuts :: a -> SE (SigOuts a)
instance Outs Sig where
type SigOuts Sig = Sig
toOuts = return
instance Outs (Sig, Sig) where
type SigOuts (Sig, Sig) = (Sig, Sig)
toOuts = return
instance Outs (Sig, Sig, Sig, Sig) where
type SigOuts (Sig, Sig, Sig, Sig) = (Sig, Sig, Sig, Sig)
toOuts = return
instance Outs (SE Sig) where
type SigOuts (SE Sig) = Sig
toOuts = id
instance Outs (SE (Sig, Sig)) where
type SigOuts (SE (Sig, Sig)) = (Sig, Sig)
toOuts = id
instance Outs (SE (Sig, Sig, Sig, Sig)) where
type SigOuts (SE (Sig, Sig, Sig, Sig)) = (Sig, Sig, Sig, Sig)
toOuts = id