csound-expression 0.0 → 0.0.1
raw patch · 17 files changed
+2089/−952 lines, 17 filesdep +directorydep +filepathdep +haskell98
Dependencies added: directory, filepath, haskell98
Files
- csound-expression.cabal +12/−4
- src/CsoundExpr/Base.hs +5/−3
- src/CsoundExpr/Base/Arithmetic.hs +53/−4
- src/CsoundExpr/Base/Gens.hs +228/−3
- src/CsoundExpr/Base/Header.hs +43/−10
- src/CsoundExpr/Base/Imperative.hs +727/−0
- src/CsoundExpr/Base/Literal.hs +0/−726
- src/CsoundExpr/Base/Pretty.hs +85/−0
- src/CsoundExpr/Base/Types.hs +16/−188
- src/CsoundExpr/Opcodes/Siggen/Lineexp.hs +51/−7
- src/CsoundExpr/Translator/Header.hs +0/−1
- src/CsoundExpr/Translator/Types.hs +26/−6
- src/CsoundExpr/Tutorial.hs +37/−0
- src/CsoundExpr/Tutorial/Composition.hs +280/−0
- src/CsoundExpr/Tutorial/Intro.hs +128/−0
- src/CsoundExpr/Tutorial/Limits.hs +83/−0
- src/CsoundExpr/Tutorial/Orchestra.hs +315/−0
csound-expression.cabal view
@@ -1,12 +1,12 @@ Name: csound-expression-Version: 0.0+Version: 0.0.1 Cabal-Version: >= 1.2 License: BSD3 License-File: LICENSE Author: Anton Kholomiov Maintainer: <anton.kholomiov@gmail.com> Synopsis: Csound combinator library-Description: Csound code generator+Description: Csound code generator. See "CsoundExpr.Tutorial" for guides and examples. Category: Sound, Music Stability: Experimental Tested-With: GHC==6.12.1@@ -15,14 +15,14 @@ Library Build-Depends:- base >= 4, base < 5, containers, mtl, pretty, temporal-media == 0.0+ base >= 4, base < 5, containers, mtl, pretty, filepath, directory, haskell98, temporal-media == 0.0 Hs-Source-Dirs: src/ Exposed-Modules: CsoundExpr -- Base CsoundExpr.Base CsoundExpr.Base.Types- CsoundExpr.Base.Literal+ CsoundExpr.Base.Imperative CsoundExpr.Base.MultiOut CsoundExpr.Base.SideEffect CsoundExpr.Base.Arithmetic@@ -31,6 +31,14 @@ CsoundExpr.Base.Gens CsoundExpr.Base.Pitch CsoundExpr.Base.UserDefined+ CsoundExpr.Base.Pretty+-- Tutorial+ CsoundExpr.Tutorial+ CsoundExpr.Tutorial.Intro+ CsoundExpr.Tutorial.Composition+ CsoundExpr.Tutorial.Orchestra+ CsoundExpr.Tutorial.Limits+ -- Opcodes CsoundExpr.Opcodes CsoundExpr.Opcodes.Siggen
src/CsoundExpr/Base.hs view
@@ -5,23 +5,25 @@ -- and "CsoundExpr.Base.Pitch". module CsoundExpr.Base ( module CsoundExpr.Base.Types,- module CsoundExpr.Base.Literal,+ module CsoundExpr.Base.Imperative, module CsoundExpr.Base.MultiOut, module CsoundExpr.Base.Arithmetic, module CsoundExpr.Base.SideEffect, module CsoundExpr.Base.Header, module CsoundExpr.Base.Score,- module CsoundExpr.Base.Gens + module CsoundExpr.Base.Gens, + module CsoundExpr.Base.Pretty ) where import CsoundExpr.Base.Types-import CsoundExpr.Base.Literal+import CsoundExpr.Base.Imperative import CsoundExpr.Base.MultiOut import CsoundExpr.Base.Arithmetic import CsoundExpr.Base.SideEffect import CsoundExpr.Base.Header import CsoundExpr.Base.Score import CsoundExpr.Base.Gens +import CsoundExpr.Base.Pretty
src/CsoundExpr/Base/Arithmetic.hs view
@@ -1,12 +1,12 @@ {-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances, - FlexibleContexts #-}+ FlexibleContexts #-} -- | Arithmetic operators module CsoundExpr.Base.Arithmetic - (Opr2, (<+>), neg, (<->), (<*>), (</>))+ (Opr2, (<+>), neg, (<->), (<*>), (</>), (<*)) where import Prelude hiding (div)@@ -14,12 +14,14 @@ import Control.Applicative(liftA2, (<$>)) import Data.Function(on) -import CsoundExpr.Base.Types+import CsoundExpr.Translator.Types import CsoundExpr.Translator.Cs.CsTree import CsoundExpr.Translator.ExprTree.ExprTree import CsoundExpr.Base.UserDefined +import CsoundExpr.Base.Types (Irate(..), Krate(..), Arate(..)) +infixr 8 <* infixr 7 <*>, </> infixr 6 <+>, <-> @@ -68,10 +70,56 @@ neg :: (X a) => a -> a neg = opr1 "-" negate . to +-- | Scaling+(<*) :: X a => Irate -> a -> a+(<*) = subst $ opr2 "*" (*)+ ------------------------------------------------------------- Irates+-- Num instances+-- +instance Eq Arate where+ (==) = error "(==) is undefined"+ (/=) = error "(/=) is undefined" +instance Eq Krate where+ (==) = error "(==) is undefined"+ (/=) = error "(/=) is undefined"++instance Eq Irate where+ (==) = error "(==) is undefined"+ (/=) = error "(/=) is undefined"++++instance Num Arate where+ (+) = (<+>)+ (*) = (<*>)+ abs = opr1p "abs" abs . to+ signum = error "is undefined"+ (-) = (<->)+ fromInteger = double . fromInteger+++instance Fractional Arate where+ (/) = (</>)+ fromRational = double . fromRational+++instance Num Krate where+ (+) = (<+>)+ (*) = (<*>)+ abs = opr1p "abs" abs . to+ signum = error "is undefined"+ (-) = (<->)+ fromInteger = double . fromInteger+++instance Fractional Krate where+ (/) = (</>)+ fromRational = double . fromRational++ instance Num Irate where (+) = (<+>) (*) = (<*>)@@ -84,4 +132,5 @@ instance Fractional Irate where (/) = (</>) fromRational = double . fromRational+
src/CsoundExpr/Base/Gens.hs view
@@ -2,9 +2,10 @@ MultiParamTypeClasses, FlexibleContexts #-} --- | Gen routines+-- | Gen routines. First argument is ftable's size, load time is set to zero.+-- -- <http://www.csounds.com/manual/html/ScoreGenRef.html>-+-- module CsoundExpr.Base.Gens ( skipNorm,@@ -27,7 +28,40 @@ -- * Amplitude Scaling GEN Routines gen04, gen12, gen24, -- * Mixing GEN Routines- gen18, gen31, gen32+ gen18, gen31, gen32,++-- * genXX'2+ + -- | Gens size is power of two+ --+ -- >genXX'2 = genXX . (2^) +++ gen09'2, gen10'2, gen11'2, gen19'2, gen30'2, gen33'2, gen34'2, + gen05'2, gen06'2, gen07'2, gen08'2, gen16'2, gen25'2, gen27'2, + gen01'2, gen23'2, gen28'2,+ gen02'2, gen17'2,+ gen20'2,+ gen21'2, gen40'2, gen41'2, gen42'2, gen43'2, + gen03'2, gen13'2, gen14'2, gen15'2,+ gen04'2, gen12'2, gen24'2,+ gen18'2, gen31'2, gen32'2,+-- * genXX'12+ + -- | Gens size is power of two plus one+ --+ -- >genXX'12 = genXX . (+1) . (2^)+ gen09'12, gen10'12, gen11'12, gen19'12, gen30'12, gen33'12, gen34'12,+ gen05'12, gen06'12, gen07'12, gen08'12, gen16'12, gen25'12, gen27'12, + gen01'12, gen23'12, gen28'12,+ gen02'12, gen17'12,+ gen20'12,+ gen21'12, gen40'12, gen41'12, gen42'12, gen43'12, + gen03'12, gen13'12, gen14'12, gen15'12,+ gen04'12, gen12'12, gen24'12,+ gen18'12, gen31'12, gen32'12 ++ ) where @@ -73,32 +107,46 @@ -- phsX - phase -- | GEN09 - Composite waveforms made up of weighted sums of simple sinusoids.+--+-- url : <http://www.csounds.com/manual/html/GEN09.html> gen09 :: Int -> [Double] -> Irate gen09 = genD 9 -- | GEN10 - Composite waveforms made up of weighted sums of simple sinusoids.+--+-- url : <http://www.csounds.com/manual/html/GEN10.html> gen10 :: Int -> [Double] -> Irate gen10 = genD 10 -- | GEN11 - Additive set of cosine partials.+--+-- url : <http://www.csounds.com/manual/html/GEN11.html> gen11 :: Int -> [Double] -> Irate gen11 = genD 11 -- | GEN19 - Composite waveforms made up of weighted sums of simple sinusoids.+--+-- url : <http://www.csounds.com/manual/html/GEN19.html> gen19 :: Int -> [Double] -> Irate gen19 = genD 19 -- | GEN30 - Generates harmonic partials by analyzing an existing table.+--+-- url : <http://www.csounds.com/manual/html/GEN30.html> gen30 :: Int -> Irate -> [Double] -> Irate gen30 = gen3x 30 -- | GEN33 - Generate composite waveforms by mixing simple sinusoids.+--+-- url : <http://www.csounds.com/manual/html/GEN33.html> gen33 :: Int -> Irate -> [Double] -> Irate gen33 = gen3x 33 -- | GEN34 - Generate composite waveforms by mixing simple sinusoids.+--+-- url : <http://www.csounds.com/manual/html/GEN34.html> gen34 :: Int -> Irate -> [Double] -> Irate gen34 = gen3x 34 @@ -116,30 +164,44 @@ -- n1, n2,... -- length of segment -- | GEN05 - Constructs functions from segments of exponential curves.+--+-- url : <http://www.csounds.com/manual/html/GEN05.html> gen05 :: Int -> [Double] -> Irate gen05 = genD 5 -- | GEN06 - Generates a function comprised of segments of cubic polynomials.+--+-- url : <http://www.csounds.com/manual/html/GEN06.html> gen06 :: Int -> [Double] -> Irate gen06 = genD 6 -- | GEN07 - Constructs functions from segments of straight lines.+--+-- url : <http://www.csounds.com/manual/html/GEN07.html> gen07 :: Int -> [Double] -> Irate gen07 = genD 7 -- | GEN08 - Generate a piecewise cubic spline curve.+--+-- url : <http://www.csounds.com/manual/html/GEN08.html> gen08 :: Int -> [Double] -> Irate gen08 = genD 8 -- | GEN16 - Creates a table from a starting value to an ending value.+--+-- url : <http://www.csounds.com/manual/html/GEN16.html> gen16 :: Int -> [Double] -> Irate gen16 = genD 16 -- | GEN25 - Construct functions from segments of exponential curves in breakpoint fashion.+--+-- url : <http://www.csounds.com/manual/html/GEN25.html> gen25 :: Int -> [Double] -> Irate gen25 = genD 25 -- | GEN27 - Construct functions from segments of straight lines in breakpoint fashion.+--+-- url : <http://www.csounds.com/manual/html/GEN27.html> gen27 :: Int -> [Double] -> Irate gen27 = genD 27 @@ -148,14 +210,20 @@ -- gen01, gen23, gen28, -- | GEN01 - Transfers data from a soundfile into a function table.+--+-- url : <http://www.csounds.com/manual/html/GEN01.html> gen01 :: Int -> String -> [Double] -> Irate gen01 n file xs = gen 1 n $ [ftvalS file] ++ map ftvalD xs -- | GEN23 - Reads numeric values from a text file.+--+-- url : <http://www.csounds.com/manual/html/GEN23.html> gen23 :: Int -> String -> Irate gen23 n file = gen 23 n [ftvalS file] -- | GEN28 - Reads a text file which contains a time-tagged trajectory.+--+-- url : <http://www.csounds.com/manual/html/GEN28.html> gen28 :: Int -> String -> Irate gen28 n file = gen 28 n [ftvalS file] @@ -164,10 +232,14 @@ -- gen02, gen17, -- | GEN02 - Transfers data from immediate pfields into a function table.+--+-- url : <http://www.csounds.com/manual/html/GEN02.html> gen02 :: Int -> [Double] -> Irate gen02 = genD 2 -- | GEN17 - Creates a step function from given x-y pairs.+--+-- url : <http://www.csounds.com/manual/html/GEN17.html> gen17 :: Int -> [Double] -> Irate gen17 = genD 17 @@ -175,6 +247,8 @@ -- gen20, -- | GEN20 - Generates functions of different windows.+--+-- url : <http://www.csounds.com/manual/html/GEN20.html> gen20 :: Int -> [Double] -> Irate gen20 = genD 20 @@ -183,22 +257,32 @@ -- gen21, gen40, gen41, gen42, gen43, -- | GEN21 - Generates tables of different random distributions.+--+-- url : <http://www.csounds.com/manual/html/GEN21.html> gen21 :: Int -> [Double] -> SideEffect Irate gen21 = gen21 -- | GEN41 - Generates a random list of numerical pairs.+--+-- url : <http://www.csounds.com/manual/html/GEN41.html> gen41 :: Int -> [Double] -> SideEffect Irate gen41 = gen41 -- | GEN42 - Generates a random distribution of discrete ranges of values.+--+-- url : <http://www.csounds.com/manual/html/GEN42.html> gen42 :: Int -> [Double] -> SideEffect Irate gen42 = gen42 -- | GEN40 - Generates a random distribution using a distribution histogram.+--+-- url : <http://www.csounds.com/manual/html/GEN40.html> gen40 :: Int -> Irate -> SideEffect Irate gen40 n ft = gen 40 n [ftvalF ft] -- | GEN43 - Loads a PVOCEX file containing a PV analysis.+--+-- url : <http://www.csounds.com/manual/html/GEN43.html> gen43 :: Int -> String -> [Double] -> Irate gen43 n file vs = gen 43 n $ [ftvalS file] ++ map ftvalD vs @@ -208,18 +292,26 @@ -- | GEN03 - Generates a stored function table by evaluating a polynomial.+--+-- url : <http://www.csounds.com/manual/html/GEN03.html> gen03 :: Int -> [Double] -> Irate gen03 = genD 3 -- | GEN13 - Stores a polynomial whose coefficients derive from the Chebyshev polynomials of the first kind.+--+-- url : <http://www.csounds.com/manual/html/GEN13.html> gen13 :: Int -> [Double] -> Irate gen13 = genD 13 -- | GEN14 - Stores a polynomial whose coefficients derive from Chebyshevs of the second kind.+--+-- url : <http://www.csounds.com/manual/html/GEN14.html> gen14 :: Int -> [Double] -> Irate gen14 = genD 14 -- | GEN15 - Creates two tables of stored polynomial functions.+--+-- url : <http://www.csounds.com/manual/html/GEN15.html> gen15 :: Int -> [Double] -> Irate gen15 = genD 15 @@ -227,14 +319,20 @@ -- gen04, gen12, gen24, -- | GEN12 - Generates the log of a modified Bessel function of the second kind.+--+-- url : <http://www.csounds.com/manual/html/GEN12.html> gen12 :: Int -> [Double] -> Irate gen12 = genD 12 -- | GEN04 - Generates a normalizing function.+--+-- url : <http://www.csounds.com/manual/html/GEN04.html> gen04 :: Int -> Irate -> [Double] -> Irate gen04 n ft vs = gen 4 n $ [ftvalF ft] ++ map ftvalD vs -- | GEN24 - Reads numeric values from another allocated function-table and rescales them.+--+-- url : <http://www.csounds.com/manual/html/GEN24.html> gen24 :: Int -> Irate -> [Double] -> Irate gen24 n ft vs = gen 24 n $ [ftvalF ft] ++ map ftvalD vs @@ -243,15 +341,142 @@ -- gen18, gen31, gen32 -- | GEN18 - Writes composite waveforms made up of pre-existing waveforms.+--+-- url : <http://www.csounds.com/manual/html/GEN18.html> gen18 :: Int -> [(Irate, Double, Int, Int)] -> Irate gen18 n xs = gen 18 n (f =<< xs) where f (x1, x2, x3, x4) = [ftvalF x1, ftvalD x2, ftvalI x3, ftvalI x4] -- | GEN31 - Mixes any waveform specified in an existing table.+--+-- url : <http://www.csounds.com/manual/html/GEN31.html> gen31 :: Int -> Irate -> [Double] -> Irate gen31 n ft vs = gen 31 n $ [ftvalF ft] ++ map ftvalD vs -- | GEN32 - Mixes any waveform, resampled with either FFT or linear interpolation.+--+-- url : <http://www.csounds.com/manual/html/GEN32.html> gen32 :: Int -> [(Irate, Int, Double, Double)] -> Irate gen32 n xs = gen 32 n (f =<< xs) where f (x1, x2, x3, x4) = [ftvalF x1, ftvalI x2, ftvalD x3, ftvalD x4]++--------------------------------------------------------------+--++-- genXX'(12|2) generation program++{-+import Text.PrettyPrint++ids = [9, 10, 11, 19, 30, 33, 34] +++ [5 .. 8] ++ [16, 25, 27] +++ [1, 23, 28] ++ + [2, 17] +++ [20] ++ + [21] ++ [40 .. 43] +++ [3] ++ [13 .. 15] +++ [4, 12, 24] ++ + [18, 31, 32]+ ++toStr x+ | length s == 1 = "0" ++ s+ | otherwise = s+ where s = show x++-- genXX'2 = genXX . (^2)+toGen'2 x = show $ name <> text "'2" <+> equals <+> name <+> text ". (^2)"+ where name = text "gen" <> text (toStr x)+++-- genXX'12 = genXX . (+1) . (^2)+toGen'12 x = show $ name <> text "'12" <+> equals <+> name <+> text ". (+1) . (^2)"+ where name = text "gen" <> text (toStr x)++++main = do+ mapM_ (putStrLn . toGen'12) ids++-}++--------------------------------------------------------------+-- genXX'2+--++gen09'2 = gen09 . (2^)+gen10'2 = gen10 . (2^)+gen11'2 = gen11 . (2^)+gen19'2 = gen19 . (2^)+gen30'2 = gen30 . (2^)+gen33'2 = gen33 . (2^)+gen34'2 = gen34 . (2^)+gen05'2 = gen05 . (2^)+gen06'2 = gen06 . (2^)+gen07'2 = gen07 . (2^)+gen08'2 = gen08 . (2^)+gen16'2 = gen16 . (2^)+gen25'2 = gen25 . (2^)+gen27'2 = gen27 . (2^)+gen01'2 = gen01 . (2^)+gen23'2 = gen23 . (2^)+gen28'2 = gen28 . (2^)+gen02'2 = gen02 . (2^)+gen17'2 = gen17 . (2^)+gen20'2 = gen20 . (2^)+gen21'2 = gen21 . (2^)+gen40'2 = gen40 . (2^)+gen41'2 = gen41 . (2^)+gen42'2 = gen42 . (2^)+gen43'2 = gen43 . (2^)+gen03'2 = gen03 . (2^)+gen13'2 = gen13 . (2^)+gen14'2 = gen14 . (2^)+gen15'2 = gen15 . (2^)+gen04'2 = gen04 . (2^)+gen12'2 = gen12 . (2^)+gen24'2 = gen24 . (2^)+gen18'2 = gen18 . (2^)+gen31'2 = gen31 . (2^)+gen32'2 = gen32 . (2^)++--------------------------------------------------------------+-- genXX'12+--++gen09'12 = gen09 . (+1) . (2^)+gen10'12 = gen10 . (+1) . (2^)+gen11'12 = gen11 . (+1) . (2^)+gen19'12 = gen19 . (+1) . (2^)+gen30'12 = gen30 . (+1) . (2^)+gen33'12 = gen33 . (+1) . (2^)+gen34'12 = gen34 . (+1) . (2^)+gen05'12 = gen05 . (+1) . (2^)+gen06'12 = gen06 . (+1) . (2^)+gen07'12 = gen07 . (+1) . (2^)+gen08'12 = gen08 . (+1) . (2^)+gen16'12 = gen16 . (+1) . (2^)+gen25'12 = gen25 . (+1) . (2^)+gen27'12 = gen27 . (+1) . (2^)+gen01'12 = gen01 . (+1) . (2^)+gen23'12 = gen23 . (+1) . (2^)+gen28'12 = gen28 . (+1) . (2^)+gen02'12 = gen02 . (+1) . (2^)+gen17'12 = gen17 . (+1) . (2^)+gen20'12 = gen20 . (+1) . (2^)+gen21'12 = gen21 . (+1) . (2^)+gen40'12 = gen40 . (+1) . (2^)+gen41'12 = gen41 . (+1) . (2^)+gen42'12 = gen42 . (+1) . (2^)+gen43'12 = gen43 . (+1) . (2^)+gen03'12 = gen03 . (+1) . (2^)+gen13'12 = gen13 . (+1) . (2^)+gen14'12 = gen14 . (+1) . (2^)+gen15'12 = gen15 . (+1) . (2^)+gen04'12 = gen04 . (+1) . (2^)+gen12'12 = gen12 . (+1) . (2^)+gen24'12 = gen24 . (+1) . (2^)+gen18'12 = gen18 . (+1) . (2^)+gen31'12 = gen31 . (+1) . (2^)+gen32'12 = gen32 . (+1) . (2^)+
src/CsoundExpr/Base/Header.hs view
@@ -1,21 +1,32 @@ -- | Header section module CsoundExpr.Base.Header - (Header, SignalInit,+ (+ -- * Types+ Header, SignalInit,+ -- * Setup variables gSr, gKr, gKsmps, gNchnls, g0dbfs,- massign, pgmassign, instrOrder,+ -- * midi instruments+ massign, pgmassign, + -- * Setting instrument order+ instrOrder,+ -- * Header opcodes instr0, initA, initK, initI,- seed, ctrlinit, ftgen+ seed, ctrlinit, ftgen,+ -- * Constants++ -- | (gSr = 44100, gKr = 4410, gKsmps = 10)+ headerMono, headerStereo ) where -import CsoundExpr.Translator.Cs.CsTree (int, argIn, Rate(..))+import CsoundExpr.Translator.Cs.CsTree (int, double, argIn, Rate(..)) import CsoundExpr.Translator.Types import CsoundExpr.Base.UserDefined+import CsoundExpr.Base.Imperative((<=>)) --- | Header section-type Header = [SignalInit]+import CsoundExpr.Base.Arithmetic gSr, gKr, gKsmps, gNchnls, g0dbfs :: Irate @@ -47,10 +58,11 @@ -- Example : -- -- > header = [--- > gSr 44100,--- > gKr 4410, --- > gKsmps 10,--- > gNchnls 1, +-- > instr0 [ +-- > gSr <=> 44100,+-- > gKr <=> 4410, +-- > gKsmps <=> 10,+-- > gNchnls <=> 1], -- > instrOrder [instr1 (0, 0), instr2 ""] -- > ] -- @@ -126,3 +138,24 @@ ftgen :: Irate -> Irate -> Irate -> [Irate] -> Irate ftgen itime isize igen inits = opcode "ftgen" args where args = [int 0, to itime, to isize, to igen] ++ map to inits++++headerMono :: Header+headerMono = + return $ instr0 [+ gSr <=> 44100,+ gKr <=> 4410,+ gKsmps <=> 10,+ gNchnls <=> 1]+++headerStereo :: Header+headerStereo = + return $ instr0 [+ gSr <=> 44100,+ gKr <=> 4410,+ gKsmps <=> 10,+ gNchnls <=> 1]++
+ src/CsoundExpr/Base/Imperative.hs view
@@ -0,0 +1,727 @@+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses,+ TypeSynonymInstances, FlexibleContexts #-} + +-- | Functions to write imperative style csound code + +module CsoundExpr.Base.Imperative (+ outList,+ ar,+ kr,+ ir,+ gar,+ gkr,+ gir,+ Assign(..))+where + +import CsoundExpr.Translator.Types+import CsoundExpr.Translator.Cs.IM+import CsoundExpr.Translator.Cs.CsTree+import CsoundExpr.Translator.ExprTree.ExprTree + + +ar :: Name -> Arate+ar = argIn A + + +kr :: Name -> Krate+kr = argIn K + + +ir :: Name -> Irate+ir = argIn I + + +gar :: Name -> Arate+gar = argIn GA + + +gkr :: Name -> Krate+gkr = argIn GK + + +gir :: Name -> Irate+gir = argIn GI + + +fromArgIn :: (IM CsTree a) => a -> (Rate, Name)+fromArgIn a+ | isArg e = (argRate e, argName e)+ | otherwise =+ error "left hand side of <=> should be named expression"+ where e = exprOp $ exprTreeTag t+ t = to a :: CsTree + +-- Assign Class + + +infixr 0 <=> + + +class Assign a where+ + (<=>) :: a -> a -> SignalOut + + +instance Assign Arate where+ sig <=> expr+ = let (rate, name) = fromArgIn sig in+ SignalOut $ return $ argOut rate name expr + + +instance Assign Krate where+ sig <=> expr+ = let (rate, name) = fromArgIn sig in+ SignalOut $ return $ argOut rate name expr + + +instance Assign Irate where+ sig <=> expr+ = let (rate, name) = fromArgIn sig in+ SignalOut $ return $ argOut rate name expr + + +instance (Assign a) => Assign [a] where+ sigs <=> exprs = outList $ zipWith (<=>) sigs exprs + + +instance (Assign a0, Assign a1) => Assign (a0, a1) where+ (sig0, sig1) <=> (exprs0, exprs1)+ = outList [sig0 <=> exprs0, sig1 <=> exprs1] + + +instance (Assign a0, Assign a1, Assign a2) => Assign (a0, a1, a2)+ where+ (sig0, sig1, sig2) <=> (exprs0, exprs1, exprs2)+ = outList [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3) => Assign+ (a0, a1, a2, a3) where+ (sig0, sig1, sig2, sig3) <=> (exprs0, exprs1, exprs2, exprs3)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4) =>+ Assign (a0, a1, a2, a3, a4) where+ (sig0, sig1, sig2, sig3, sig4) <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5) =>+ Assign (a0, a1, a2, a3, a4, a5) where+ (sig0, sig1, sig2, sig3, sig4, sig5) <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6) =>+ Assign (a0, a1, a2, a3, a4, a5, a6) where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6) <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7) =>+ Assign (a0, a1, a2, a3, a4, a5, a6, a7) where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7) <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8) =>+ Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8) where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8) <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9) =>+ Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9) <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9,+ Assign a10) =>+ Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11) =>+ Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12) =>+ Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13) =>+ Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23, Assign a24) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23, a24)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23, sig24)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23, exprs24)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23, Assign a24, Assign a25) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23, sig24, sig25)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23, exprs24, exprs25)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,+ sig25 <=> exprs25] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,+ Assign a26) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23, sig24, sig25, sig26)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23, exprs24, exprs25, exprs26)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,+ sig25 <=> exprs25, sig26 <=> exprs26] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,+ Assign a26, Assign a27) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23, exprs24, exprs25, exprs26, exprs27)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,+ sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,+ Assign a26, Assign a27, Assign a28) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27,+ a28)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27, sig28)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23, exprs24, exprs25, exprs26, exprs27, exprs28)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,+ sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27,+ sig28 <=> exprs28] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,+ Assign a26, Assign a27, Assign a28, Assign a29) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27,+ a28, a29)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27, sig28,+ sig29)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23, exprs24, exprs25, exprs26, exprs27, exprs28,+ exprs29)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,+ sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27,+ sig28 <=> exprs28, sig29 <=> exprs29] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,+ Assign a26, Assign a27, Assign a28, Assign a29, Assign a30) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27,+ a28, a29, a30)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27, sig28,+ sig29, sig30)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23, exprs24, exprs25, exprs26, exprs27, exprs28,+ exprs29, exprs30)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,+ sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27,+ sig28 <=> exprs28, sig29 <=> exprs29, sig30 <=> exprs30] + + +instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,+ Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,+ Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,+ Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,+ Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,+ Assign a26, Assign a27, Assign a28, Assign a29, Assign a30,+ Assign a31) =>+ Assign+ (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,+ a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27,+ a28, a29, a30, a31)+ where+ (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,+ sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,+ sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27, sig28,+ sig29, sig30, sig31)+ <=>+ (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,+ exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,+ exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,+ exprs22, exprs23, exprs24, exprs25, exprs26, exprs27, exprs28,+ exprs29, exprs30, exprs31)+ = outList+ [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,+ sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,+ sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,+ sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,+ sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,+ sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,+ sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,+ sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,+ sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27,+ sig28 <=> exprs28, sig29 <=> exprs29, sig30 <=> exprs30,+ sig31 <=> exprs31]
− src/CsoundExpr/Base/Literal.hs
@@ -1,726 +0,0 @@-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses,- TypeSynonymInstances, FlexibleContexts #-} - --- | Functions to write imperative style csound code - -module CsoundExpr.Base.Literal(- ar,- kr,- ir,- gar,- gkr,- gir,- Assign(..))-where - -import CsoundExpr.Translator.Types-import CsoundExpr.Translator.Cs.IM-import CsoundExpr.Translator.Cs.CsTree-import CsoundExpr.Translator.ExprTree.ExprTree - - -ar :: Name -> Arate-ar = argIn A - - -kr :: Name -> Krate-kr = argIn K - - -ir :: Name -> Irate-ir = argIn I - - -gar :: Name -> Arate-gar = argIn GA - - -gkr :: Name -> Krate-gkr = argIn GK - - -gir :: Name -> Irate-gir = argIn GI - - -fromArgIn :: (IM CsTree a) => a -> (Rate, Name)-fromArgIn a- | isArg e = (argRate e, argName e)- | otherwise =- error "left hand side of <=> should be named expression"- where e = exprOp $ exprTreeTag t- t = to a :: CsTree - --- Assign Class - - -infixr 0 <=> - - -class Assign a where- - (<=>) :: a -> a -> SignalOut - - -instance Assign Arate where- sig <=> expr- = let (rate, name) = fromArgIn sig in- SignalOut $ return $ argOut rate name expr - - -instance Assign Krate where- sig <=> expr- = let (rate, name) = fromArgIn sig in- SignalOut $ return $ argOut rate name expr - - -instance Assign Irate where- sig <=> expr- = let (rate, name) = fromArgIn sig in- SignalOut $ return $ argOut rate name expr - - -instance (Assign a) => Assign [a] where- sigs <=> exprs = outList $ zipWith (<=>) sigs exprs - - -instance (Assign a0, Assign a1) => Assign (a0, a1) where- (sig0, sig1) <=> (exprs0, exprs1)- = outList [sig0 <=> exprs0, sig1 <=> exprs1] - - -instance (Assign a0, Assign a1, Assign a2) => Assign (a0, a1, a2)- where- (sig0, sig1, sig2) <=> (exprs0, exprs1, exprs2)- = outList [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3) => Assign- (a0, a1, a2, a3) where- (sig0, sig1, sig2, sig3) <=> (exprs0, exprs1, exprs2, exprs3)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4) =>- Assign (a0, a1, a2, a3, a4) where- (sig0, sig1, sig2, sig3, sig4) <=>- (exprs0, exprs1, exprs2, exprs3, exprs4)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5) =>- Assign (a0, a1, a2, a3, a4, a5) where- (sig0, sig1, sig2, sig3, sig4, sig5) <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6) =>- Assign (a0, a1, a2, a3, a4, a5, a6) where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6) <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7) =>- Assign (a0, a1, a2, a3, a4, a5, a6, a7) where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7) <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8) =>- Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8) where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8) <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9) =>- Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9) <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9,- Assign a10) =>- Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11) =>- Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12) =>- Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13) =>- Assign (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23, Assign a24) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23, a24)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23, sig24)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23, exprs24)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23, Assign a24, Assign a25) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23, sig24, sig25)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23, exprs24, exprs25)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,- sig25 <=> exprs25] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,- Assign a26) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23, sig24, sig25, sig26)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23, exprs24, exprs25, exprs26)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,- sig25 <=> exprs25, sig26 <=> exprs26] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,- Assign a26, Assign a27) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23, exprs24, exprs25, exprs26, exprs27)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,- sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,- Assign a26, Assign a27, Assign a28) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27,- a28)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27, sig28)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23, exprs24, exprs25, exprs26, exprs27, exprs28)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,- sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27,- sig28 <=> exprs28] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,- Assign a26, Assign a27, Assign a28, Assign a29) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27,- a28, a29)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27, sig28,- sig29)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23, exprs24, exprs25, exprs26, exprs27, exprs28,- exprs29)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,- sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27,- sig28 <=> exprs28, sig29 <=> exprs29] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,- Assign a26, Assign a27, Assign a28, Assign a29, Assign a30) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27,- a28, a29, a30)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27, sig28,- sig29, sig30)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23, exprs24, exprs25, exprs26, exprs27, exprs28,- exprs29, exprs30)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,- sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27,- sig28 <=> exprs28, sig29 <=> exprs29, sig30 <=> exprs30] - - -instance (Assign a0, Assign a1, Assign a2, Assign a3, Assign a4,- Assign a5, Assign a6, Assign a7, Assign a8, Assign a9, Assign a10,- Assign a11, Assign a12, Assign a13, Assign a14, Assign a15,- Assign a16, Assign a17, Assign a18, Assign a19, Assign a20,- Assign a21, Assign a22, Assign a23, Assign a24, Assign a25,- Assign a26, Assign a27, Assign a28, Assign a29, Assign a30,- Assign a31) =>- Assign- (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,- a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27,- a28, a29, a30, a31)- where- (sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10,- sig11, sig12, sig13, sig14, sig15, sig16, sig17, sig18, sig19,- sig20, sig21, sig22, sig23, sig24, sig25, sig26, sig27, sig28,- sig29, sig30, sig31)- <=>- (exprs0, exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7,- exprs8, exprs9, exprs10, exprs11, exprs12, exprs13, exprs14,- exprs15, exprs16, exprs17, exprs18, exprs19, exprs20, exprs21,- exprs22, exprs23, exprs24, exprs25, exprs26, exprs27, exprs28,- exprs29, exprs30, exprs31)- = outList- [sig0 <=> exprs0, sig1 <=> exprs1, sig2 <=> exprs2,- sig3 <=> exprs3, sig4 <=> exprs4, sig5 <=> exprs5, sig6 <=> exprs6,- sig7 <=> exprs7, sig8 <=> exprs8, sig9 <=> exprs9,- sig10 <=> exprs10, sig11 <=> exprs11, sig12 <=> exprs12,- sig13 <=> exprs13, sig14 <=> exprs14, sig15 <=> exprs15,- sig16 <=> exprs16, sig17 <=> exprs17, sig18 <=> exprs18,- sig19 <=> exprs19, sig20 <=> exprs20, sig21 <=> exprs21,- sig22 <=> exprs22, sig23 <=> exprs23, sig24 <=> exprs24,- sig25 <=> exprs25, sig26 <=> exprs26, sig27 <=> exprs27,- sig28 <=> exprs28, sig29 <=> exprs29, sig30 <=> exprs30,- sig31 <=> exprs31]
+ src/CsoundExpr/Base/Pretty.hs view
@@ -0,0 +1,85 @@+module CsoundExpr.Base.Pretty(+ Cs.CsoundFile, Cs.Flags,+ Player, FileName,+ csd, play)+where+++import Temporal.Media(EventList)+import qualified CsoundExpr.Translator.Cs.CsoundFile as Cs+import CsoundExpr.Translator.Csd+import CsoundExpr.Base.Header+import CsoundExpr.Translator.Types(Dur, SignalOut)++import System+import System.Directory+import qualified System.FilePath as FP +++---------------------------------------------------+---------------------------------------------------+-- translator++-- | Generate csound code+-- +-- Csound code consists of flags, header section, instruments, +-- ftables and score. Flags are represeted by @String@. See +-- "CsoundExpr.Base.Header" for more details on header +-- section. Instruments, ftables and score are generated from +-- 'EventList' 'Dur' 'SignalOut'. From list of 'SignalOut' notes list +-- of instruments is derived. Expression-tree structures of +-- instruments are different from one another. An instrument +-- can't be transformed into another one only with substitution +-- of values in lists of expression-tree. +--+-- Example (d minor) :+--+-- >import CsoundExpr+-- >import CsoundExpr.Opcodes+-- >import CsoundExpr.Base.Pitch+-- > +-- >flags = "-o dm.wav"+-- >+-- >setup = instr0 [+-- > gSr <=> 44100,+-- > gKr <=> 4410,+-- > gKsmps <=> 10,+-- > gNchnls <=> 1]+-- >+-- >header = [setup]+-- >+-- >sinWave = gen10 4096 [1]+-- >+-- >instr :: Irate -> SignalOut+-- >instr x = out $ oscilA [] (num 1000) (cpspch x) sinWave+-- >+-- >sco = fmap instr $ line $ map (note 1) [d 0, f 0, a 0, d 1]+-- >+-- >main = print $ csd flags header $ toList sco+--++csd :: Cs.Flags -- ^ flags + -> Header -- ^ header section+ -> EventList Dur SignalOut -- ^ score section+ -> Cs.CsoundFile -- ^ csd file+csd = toCsd++++type Player = String+type FileName = String++-- | 'play' writes 'CsoundFile' to file in temporal direcory, +-- executes csound on it, saves to .wav file, and invokes player+--+-- >play "totem" "~/temp" "song" $ csd flags header $ toList scores+play :: Player -> FP.FilePath -> FileName -> Cs.CsoundFile -> IO ExitCode+play playerCode tmpdir tmpfile csoundCode = do+ writeFile fileCsd (show csoundCode)+ system $ csound fileCsd+ system $ player fileWav+ where fileCsd = (tmpdir FP.</> tmpfile ++ ".csd") + fileWav = (tmpdir FP.</> tmpfile ++ ".wav") + csound = (("csound -o " ++ fileWav ++ " ") ++ )+ player = ((playerCode ++ " ") ++ )+
src/CsoundExpr/Base/Types.hs view
@@ -1,76 +1,43 @@ module CsoundExpr.Base.Types - (X, K,- Cs.CsoundFile, Cs.Flags,- Arate, Krate, Irate, - SignalOut, outList,- ToSignal(..), - itime, idur, num, string,- csd)+ (X(..), K,+ Arate, Krate, Irate, SignalOut, + itime, idur, num, double, string) where import Text.PrettyPrint(Doc, vcat, text, space) -import Temporal.Media(EventList)+import qualified CsoundExpr.Translator.Cs.CsTree as La -import qualified CsoundExpr.Translator.Cs.CsoundFile as Cs-import CsoundExpr.Translator.Cs.CsTree import CsoundExpr.Translator.Cs.IM- import CsoundExpr.Translator.Types-import CsoundExpr.Translator.Csd -import CsoundExpr.Base.Header--import CsoundExpr.Base.Literal +import CsoundExpr.Base.Imperative import CsoundExpr.Base.UserDefined(opcode, prefixOperation)----------------------------------------------- Rate conversion---- | Rate conversion-class ToSignal a where- arate :: a -> Arate- krate :: a -> Krate- irate :: a -> Irate---instance ToSignal Arate where- arate = id- krate = opcode "downsamp" . return . to- irate = prefixOperation "i" . return . to . krate --instance ToSignal Krate where- arate = opcode "upsamp" . return . to- krate = id- irate = prefixOperation "i" . return . to- -instance ToSignal Irate where- arate = opcode "upsamp" . return . to- krate = prefixOperation "k" . return . to- irate = id- -instance ToSignal Double where- arate = arate . irate- krate = krate . irate- irate = double-+import CsoundExpr.Translator.Csd ------------------------------------------- -- constructors -- | @p2@ p-field itime :: Irate-itime = param 2+itime = La.param 2 -- | @p3@ p-field idur :: Irate-idur = param 3+idur = La.param 3 -- | auxiliary function, to write (num n) instead of (n :: Irate) num :: Irate -> Irate num = id +-- | Lift 'Double' to 'Irate'+double :: Double -> Irate+double = La.double +-- | Lift 'String' to 'Irate'+string :: String -> Irate+string = La.string+ --------------------------------------------- -- show instances @@ -89,144 +56,5 @@ instance Show SignalOut where show x = show $ vcat [title , ppCsTrees $ fromSignalOut x] where title = text "; SignalOut expression :"- ----------------------------------------------------------------------------------------------------------- translator --- | Generate csound code--- --- Csound code consists of flags, header section, instruments, --- ftables and score. Flags are represeted by @String@. See --- "CsoundExpr.Orchestra.Header" for more details on header --- section. Instruments, ftables and score are generated from --- 'EventList' 'Dur' 'SignalOut'. From list of 'SignalOut' notes list --- of instruments is derived. Expression-tree structures of --- instruments are different from one another. An instrument --- can't be transformed into another one only with substitution --- of values in lists of expression-tree. ------ Example (d minor) :------ >import CsoundExpr--- >import CsoundExpr.Opcodes--- >import CsoundExpr.Base.Pitch--- > --- >flags = "-o dm.wav"--- >--- >setup = instr0 [--- > gSr <=> 44100,--- > gKr <=> 4410,--- > gKsmps <=> 10,--- > gNchnls <=> 1]--- >--- >header = [setup]--- >--- >sinWave = gen10 4096 [1]--- >--- >instr :: Irate -> SignalOut--- >instr x = out $ oscilA [] (num 1000) (cpspch x) sinWave--- >--- >sco = fmap instr $ line $ map (note 1) [d 0, f 0, a 0, d 1]--- >--- >main = print $ csd flags header $ toList sco--------- Example (radiohead - weird fishes, intro) :------ >import CsoundExpr--- >import CsoundExpr.Opcodes hiding (delay)--- >import CsoundExpr.Base.Pitch--- >--- >--- >--- >mapSnd f (a, b) = (a, f b)--- >--- >--- >flags = "-d"--- >--- >setupMono = instr0 [--- > gSr <=> 44100,--- > gKr <=> 4410,--- > gKsmps <=> 10,--- > gNchnls <=> 1 ]--- > --- >headerMono = [setupMono]--- >--- >-- volume levels--- >--- >v1 = 1.3 * v0--- >v0 = 7000 ------ >-- instruments--- >--- >pluckInstr :: (Irate, Irate) -> SignalOut --- >pluckInstr (amp, pch) = outList [--- > out $ env <*> wgpluck2 0.75 amp (cpspch pch) (num 0.75) (num 0.5), --- > xtratim 1]--- > where env = linsegrK [0, idur * 0.05, 1, idur * 0.9, 1] 1 0 --- >--- >guitar = pluckInstr . mapSnd (+ (-1))--- >--- >--- >--chords--- >--- >guitarChord1, guitarChord2, guitarChord3 :: [Irate] -> Score (Irate, Irate)--- >--- >-- volumes 4/4--- >vs x = map ( * x) $ cycle [v1, v0, v0, v0]--- >--- >-- guitar 1--- >guitarChord1 = line . map return . zip (vs 1) . concat . replicate 10--- >--- >ch11 = [d 1, g 0, e 0]--- >ch12 = map ( + 0.02) ch11--- >ch13 = [a 1, a 0, cs 1]--- >ch14 = [fs 1, b 0, g 0]--- >--- >chSeq1 = line $ map return $ [ch11, ch12, ch13, ch14]--- >--- >-- guitar 2--- >guitarChord2 = line . map return . zip (vs 0.5) . concat . replicate 6 . arpeggi--- > where arpeggi x = x ++ take 2 x--- >--- >--- >ch21 = [g 0, d 1, e 1]--- >ch22 = map (+ 0.02) ch21--- >ch23 = [cs 1, e 1, a 1]--- >ch24 = [d 1, g 1, e 1]--- >--- >chSeq2 = line $ map return $ [ch21, ch22, ch23, ch24]--- >--- >-- guitar 3--- >guitarChord3 = line . map return . zip (vs 0.2) . concat . replicate 6 . arpeggi--- > where arpeggi x = take 2 x ++ x--- >--- >ch31 = [e 1, g 1, b 1]--- >ch32 = map (+ 0.02) ch31--- >ch33 = [fs 1, a 1, cs 2]--- >ch34 = [d 2, g 1, b 1]--- >--- >chSeq3 = line $ map return $ [ch31, ch32, ch33, ch34]--- >--- >-- scores--- >--- >scoG1 = fmap guitar $ chSeq1 >>= guitarChord1--- >scoG2 = fmap guitar $ chSeq2 >>= guitarChord2--- >scoG3 = fmap guitar $ chSeq3 >>= guitarChord3--- >--- >scoG2intro = cut (3*30) (4*30) scoG2--- >--- >intro = chord [scoG1, scoG3, delay (3*30) scoG2intro]--- >chords = loop 3 $ chord [scoG1, scoG2, scoG3] --- >--- >sco = stretch 0.17 $ intro +:+ chords--- >--- >main = print $ csd flags headerMono $ toList sco -------csd :: Cs.Flags -- ^ flags - -> Header -- ^ header section- -> EventList Dur SignalOut -- ^ score section- -> Cs.CsoundFile -- ^ csd file-csd = toCsd+
src/CsoundExpr/Opcodes/Siggen/Lineexp.hs view
@@ -3,8 +3,8 @@ (exponA, exponK, expcurve,- transegA,- transegK,+ expsegA,+ expsegK, expsega, expsegrA, expsegrK,@@ -24,7 +24,9 @@ lpsholdp, rsplineA, rsplineK,- scale)+ scale,+ transegA,+ transegK) where @@ -116,8 +118,8 @@ -- -- * url : <http://www.csounds.com/manual/html/expseg.html> -transegA :: [Irate] -> Arate-transegA i0vals = opcode "transeg" args+expsegA :: [Irate] -> Arate+expsegA i0vals = opcode "expseg" args where args = map to i0vals @@ -137,8 +139,8 @@ -- -- * url : <http://www.csounds.com/manual/html/expseg.html> -transegK :: [Irate] -> Krate-transegK i0vals = opcode "transeg" args+expsegK :: [Irate] -> Krate+expsegK i0vals = opcode "expseg" args where args = map to i0vals @@ -585,3 +587,45 @@ scale :: (K k0, K k1, K k2) => k0 -> k1 -> k2 -> Krate scale k0input k1max k2min = opcode "scale" args where args = [to k0input, to k1max, to k2min]+++-- | * opcode : transeg+-- +-- +-- * syntax : +-- +-- > ares transeg ia, idur, itype, ib [, idur2] [, itype] [, ic]...+-- > kres transeg ia, idur, itype, ib [, idur2] [, itype] [, ic]...+-- +-- +-- * description : +-- +-- Constructs a user-definable envelope.+-- +-- +-- * url : <http://www.csounds.com/manual/html/transeg.html>+ +transegA :: [Irate] -> Arate+transegA i0vals = opcode "transeg" args+ where args = map to i0vals+++-- | * opcode : transeg+-- +-- +-- * syntax : +-- +-- > ares transeg ia, idur, itype, ib [, idur2] [, itype] [, ic]...+-- > kres transeg ia, idur, itype, ib [, idur2] [, itype] [, ic]...+-- +-- +-- * description : +-- +-- Constructs a user-definable envelope.+-- +-- +-- * url : <http://www.csounds.com/manual/html/transeg.html>+ +transegK :: [Irate] -> Krate+transegK i0vals = opcode "transeg" args+ where args = map to i0vals
src/CsoundExpr/Translator/Header.hs view
@@ -19,7 +19,6 @@ import CsoundExpr.Translator.Types import CsoundExpr.Translator.Instr-import CsoundExpr.Base.Header --------------------------------------------------------------- ---------------------------------------------------------------
src/CsoundExpr/Translator/Types.hs view
@@ -13,7 +13,7 @@ Instr, MidiInstr, InstrOrder, InstrOrderInfo, Note, ValueId, SignalOut(..), outList, fromSignalOut,- SignalInit(..),+ Header, SignalInit(..), Arate(..), Krate(..), Irate(..), X(..), K(..), MO(..), toValue, toCsRate, gRate, isArgOut, toOprType )@@ -79,7 +79,6 @@ -- | init variable data Irate = Irate La.CsTree- deriving (Eq) -- rate classes @@ -121,15 +120,33 @@ -- X, K -- | 'X' = 'Arate' | 'Krate' | 'Irate'-class (IM La.CsTree a, MO a) => X a+class (IM La.CsTree a, MO a) => X a where+ arate :: a -> Arate+ krate :: a -> Krate+ irate :: a -> Irate + -- | 'K' = 'Krate' | 'Irate' class X a => K a -instance X Arate-instance X Krate-instance X Irate+instance X Arate where+ arate = id+ krate = from . pure (La.opc "downsamp") . return . toCsTree+ irate = from . pure (La.oprPrefix "i") . return . toCsTree . krate +instance X Krate where+ arate = from . pure (La.opc "upsamp") . return . toCsTree+ krate = id+ irate = from . pure (La.oprPrefix "i") . return . toCsTree+ +instance X Irate where+ arate = from . pure (La.opc "upsamp") . return . toCsTree+ krate = from . pure (La.oprPrefix "k") . return . toCsTree+ irate = id++toCsTree :: X a => a -> La.CsTree+toCsTree = to+ instance K Krate instance K Irate @@ -160,6 +177,9 @@ fromSignalOut (SignalOut x) = x -- signal init++-- | Header section+type Header = [SignalInit] data SignalInit = Instr0 SignalOut | Massign [Int] Int SignalOut
+ src/CsoundExpr/Tutorial.hs view
@@ -0,0 +1,37 @@++{-|+ Csound-expression allows csound code construction in functional way.++ It has two parts "CsoundExpr.Base" and "CsoundExpr.Opcodes".+ "Csound.Base" contains essential functionality of the package. Csound code + can be produced with "Csound.Base". "Csound.Opcodes" contains auxillary + functions to build csound instruments.++ + Tutorial contents :++ * "CsoundExpr.Tutorial.Intro" + ++ * "CsoundExpr.Tutorial.Composition" ++ score section++ * "CsoundExpr.Tutorial.Orchestra"++ orchestra section + + * "CsoundExpr.Tutorial.Limits" + + explains hack-features, limitations++ + Note :++ Feel free to report english-language bugs in tutorial or in docs.++-}++++module CsoundExpr.Tutorial where
+ src/CsoundExpr/Tutorial/Composition.hs view
@@ -0,0 +1,280 @@+{-|+ Module "CsoundExpr.Base.Score" provides functions to + construct csound's score section++ * Prev : "CsoundExpr.Tutorial.Intro"++ * Next : "CsoundExpr.Tutorial.Orchestra" +-}+++module CsoundExpr.Tutorial.Composition ( + -- * EventList+ {-| + 'EventList' contains values with time marks. + Value begins at some time and lasts for some time (see temporal-media package)+ 'EventList' can be constructed from 'Score' with 'toList' function. + -}+ exmpEventList,++ -- * Score+ + {-|+ 'Score' is tree structure that represents music. Lists contain notes and nodes+ contain information about how subtrees relate to each other in time. + Subtrees can be sequential or parallel. 'csd' function takes in 'EventList' + 'Double' 'SignalOut'. 'Double' is type of time-marks. 'SignalOut' represents + instrument structure. + -}+ exmpScore,++ -- * Score's instances+ -- | Score is a Functor, Monad, Temporal, Stretchable, Arrangeable and TemporalFunctor+ + -- ** Functor+ -- | It makes possible to represent csound's instrument as+ -- a function from note representation to 'SignalOut'. + -- + -- To play on instrument means to apply instrument to 'Score'+ -- of its notes.+ --+ -- >-- oscillator instrument+ -- >instr :: Irate -> SignalOut+ -- >instr x = out $ oscilA [] (num 1000) (cpspch x) $ gen10 4096 [1]+ -- >+ -- >exmpScoFunctor = fmap instr $ line $ map (note 1) [d 0, f 0, a 0, d 1]++ exmpScoFunctor,+ -- ** Monad + + {-|+ Gives way to more structured composition.++ + @return a@ makes note of @a@ that lasts for 1 sec.+ @ma >>= f@ is better understood by its @join@ function.++ >ma >>= f = joinScore $ fmap f ma+ >+ >joinScore :: Score (Score a) -> Score a++ @'Score' a@ is a tree. Nodes represent sequent/parallel + composition and leaves represent value @a@ or rest that lasts + for some time @t@. 'joinScore' takes in 'Score' that contains some more + 'Score' 's in its leaves, and builds one tree by substituting + values of Scores by Scores. Note that while substituting it stretches + duration of 'Score' by duration of value. ++ >type ChordType = [Irate]+ >+ >majC, minC :: ChordType+ >+ >majC = [0, 0.04, 0.07] -- in csound 0.01 is one half-tone+ >minC = [0, 0.03, 0.07]+ >+ >arpeggi :: (Irate, ChordType) -> Score Irate+ >arpeggi baseNote chordType = line $ map return (pchs ++ pchs)+ > where pchs = map ((+ baseNote) . (chordType !! )) [0, 1, 2, 1, 2, 1] + >+ >harmony = line $ map return + > [(e 0, minC), (a (-1), minC), (d 0, majC), (g 0, majC),+ > (c 0, majC), (f 0, minC), (b (-1), majC), (e 0, minC)]+ >+ >sco = harmony >>= arpeggi+ -}++ exmpScoMonad,+ -- ** Temporal+ + {-| There are two methods defined on 'Temporal' objects. + + >none :: Dur -> a -- construct rest+ >dur :: a -> Dur -- ask for duration+ -}++ exmpScoTemporal,+ -- ** Stretchable+ + {-| Stretching things in time domain with 'stretch' method.++ > stretch :: Dur -> a -> a+ -}++ exmpScoStretchable,+ -- ** Arrangeable+ --+ exmpScoArrangeable,++ -- | Constructing things in sequent '(+:+)' and parallel ways '(=:=)'+ + -- ** TemporalFunctor+ {-|+ There is class called 'TemporalFunctor' with method 'tmap'. + First argument of tmap's function means function from duration + of value @t@ and value itself @a@ to new value @b@.++ >class Dur t => TemporalFunctor f where+ > tmap :: (t -> a -> b) -> f a -> f b++ It allows to construct instruments that can rely on note duration.++ >instr :: Dur -> Irate -> SignalOut+ >instr t vol = out $ (env t <*> ) $ fst $ se1 $ unirandA vol+ > where env t+ > | t < 1 = lineK 1 idur 0+ > | otherwise = exponK 1 idur 0+ >+ >v1 = 1.5 * v0+ >v0 = 5000+ >+ >sco = tmap instr $ line [note 0.5 v1, note 0.5 v0, rest 1, note 2 v1]++ Note : ++ >stretch t (tmap instr sco) =/= tmap instr (stretch t sco)++ -}++ exmpScoTemporalFunctor,++ -- * Example++ -- | radiohead - weird fishes (intro), see src+ main++ )where++import Temporal.Media(EventList)++import CsoundExpr.Base+import CsoundExpr.Base.Pitch+import CsoundExpr.Opcodes hiding (delay)++exmpEventList :: EventList Double Irate+exmpEventList = toList $ line $ map (note 1) [c 0, d 0, e 0, f 0, g 0, a 0, b 0, c 1]+++exmpScore :: Score String+exmpScore = note 1 "hello" +:+ rest 1 +:+ note 1 "world"++-- oscilator instrument+instr :: Irate -> SignalOut+instr x = out $ oscilA [] (num 1000) (cpspch x) $ gen10 4096 [1]++exmpScoFunctor = fmap instr $ line $ map (note 1) [d 0, f 0, a 0, d 1]+++type ChordType = [Irate]++majC, minC :: ChordType++majC = [0, 0.04, 0.07] -- in csound 0.01 is one half-tone+minC = [0, 0.03, 0.07]++arpeggi :: Irate -> ChordType -> Score Irate+arpeggi baseNote chordType = line $ map return (pchs ++ pchs)+ where pchs = map ((+ baseNote) . (chordType !! )) [0, 1, 2, 1, 2, 1] ++harmony = line $ map return + [(e 0, minC), (a (-1), minC), (d 0, majC), (g 0, majC),+ (c 0, majC), (f 0, minC), (b (-1), majC), (e 0, minC)]++exmpScoMonad = harmony >>= uncurry arpeggi++exmpScoTemporal = dur exmpScoMonad++exmpScoStretchable = stretch 2 exmpScoMonad++exmpScoArrangeable = exmpScore+++instrT :: Dur -> Irate -> SignalOut+instrT t vol = out $ (env t <*> ) $ fst $ se1 $ unirandA vol+ where env t+ | t < 1 = lineK 1 idur 0+ | otherwise = exponK 1 idur 0++exmpScoTemporalFunctor = tmap instrT $ line [note 0.5 v1, note 0.5 v0, rest 1, note 2 v1]+++--------------------------------------------------------+-- example +--+-- radiohead - weird fishes (intro)++mapSnd f (a, b) = (a, f b)+++flags = "-d"++-- volume levels++v1 = 1.3 * v0+v0 = 7000 ++-- instruments++pluckInstr :: (Irate, Irate) -> SignalOut +pluckInstr (amp, pch) = outList [+ out $ env <*> wgpluck2 0.75 amp (cpspch pch) (num 0.75) (num 0.5), + xtratim 1]+ where env = linsegrK [0, idur * 0.05, 1, idur * 0.9, 1] 1 0 ++guitar = pluckInstr . mapSnd (+ (-1))+++--chords++guitarChord1, guitarChord2, guitarChord3 :: [Irate] -> Score (Irate, Irate)++-- volumes 4/4+vs x = map ( * x) $ cycle [v1, v0, v0, v0]++-- guitar 1+guitarChord1 = line . map return . zip (vs 1) . concat . replicate 10++ch11 = [d 1, g 0, e 0]+ch12 = map ( + 0.02) ch11+ch13 = [a 1, a 0, cs 1]+ch14 = [fs 1, b 0, g 0]++chSeq1 = line $ map return $ [ch11, ch12, ch13, ch14]++-- guitar 2+guitarChord2 = line . map return . zip (vs 0.5) . concat . replicate 6 . arpeggi+ where arpeggi x = x ++ take 2 x+++ch21 = [g 0, d 1, e 1]+ch22 = map (+ 0.02) ch21+ch23 = [cs 1, e 1, a 1]+ch24 = [d 1, g 1, e 1]++chSeq2 = line $ map return $ [ch21, ch22, ch23, ch24]++-- guitar 3+guitarChord3 = line . map return . zip (vs 0.2) . concat . replicate 6 . arpeggi+ where arpeggi x = take 2 x ++ x++ch31 = [e 1, g 1, b 1]+ch32 = map (+ 0.02) ch31+ch33 = [fs 1, a 1, cs 2]+ch34 = [d 2, g 1, b 1]++chSeq3 = line $ map return $ [ch31, ch32, ch33, ch34]++-- scores++scoG1 = fmap guitar $ chSeq1 >>= guitarChord1+scoG2 = fmap guitar $ chSeq2 >>= guitarChord2+scoG3 = fmap guitar $ chSeq3 >>= guitarChord3++scoG2intro = cut (3*30) (4*30) scoG2++intro = chord [scoG1, scoG3, delay (3*30) scoG2intro]+chords = loop 3 $ chord [scoG1, scoG2, scoG3] ++sco = stretch 0.17 $ intro +:+ chords++main = print $ csd flags headerMono $ toList sco +
+ src/CsoundExpr/Tutorial/Intro.hs view
@@ -0,0 +1,128 @@+{-|+ Csound-expression is csound code generator. Program produces value of 'CsoundFile' type. + 'CsoundFile' is 'Show'. So that is the way to get csound code. 'csd' function can be invoked+ to make value of 'CsoundFile' type. ++ >csd :: Flags -> Header -> EventList Dur SignalOut -> CsoundFile++ * 'Flags' is 'String'. It's pasted in place of csounds flags. ++ * 'Header' is csound header declaration. + See "CsoundExpr.Base.Header" for more details.++ * 'EventList' represents csound orchestra and score sections. + This tutorial is all about how to construct 'EventList'.+ ++ 'EventList'+++ 'EventList' contains values with time marks. + Value begins at some time and lasts for some time (see temporal-media package)+ 'EventList' can be constructed from 'Score' with 'toList' function. ++ 'Score'+++ 'Score' is tree structure that represents music. Lists contain notes and nodes+ contain information about how subtrees relate to each other in time. + Subtrees can be sequential or parallel. Module "CsoundExpr.Base.Score" exposes+ combinators for 'EventList' / 'Score' building.+ 'csd' function takes in 'EventList' 'Double' 'SignalOut'. 'Double' is type + of time-marks. 'SignalOut' represents instrument structure. +++ Let's make first simple csound code block. + It plays d minor chord wih oscilator.++ >import CsoundExpr+ >import CsoundExpr.Opcodes(out, oscilA, cpspch)+ >import CsoundExpr.Base.Pitch+ > + >flags = "-d -o dm.wav"+ >+ >-- (<=>) - assignment operator+ >-- instr0 - packs assignent statements in header statement+ >setup :: SignalInit+ >setup = instr0 [+ > gSr <=> 44100,+ > gKr <=> 4410,+ > gKsmps <=> 10,+ > gNchnls <=> 1]+ >+ >header :: Header+ >header = [setup]+ >+ >-- gen routine (see CsoundExpr.Base.Gens)+ >sinWave :: Irate+ >sinWave = gen10 4096 [1] + >+ >-- oscilator instrument+ >instr :: Irate -> SignalOut+ >instr x = out $ oscilA [] (num 1000) (cpspch x) sinWave+ >+ >-- line, note - Score constructors (see CsoundExpr.Base.Score)+ >-- Score is a Functor, so it's possible to use instruments as+ >-- functions on abstract note representation.+ >-- here note is represented with pitch value of type Irate + >-- (Irate is csound's init value) + >--+ >sco = fmap instr $ line $ map (note 1) [d 0, f 0, a 0, d 1]+ >+ >+ >-- toList - converts Score to EventList (see CsoundExpr.Base.Score)+ >dmCode = csd flags header $ toList sco+++ * Prev : "CsoundExpr.Tutorial"++ * Next : "CsoundExpr.Tutorial.Composition"+-}++--+--+module CsoundExpr.Tutorial.Intro (+ dmCode+ )+where++++import CsoundExpr+import CsoundExpr.Opcodes+import CsoundExpr.Base.Pitch+ +flags = "-o dm.wav"++-- (<=>) - assignment operator+-- instr0 - packs assignent statements in header statement+setup = instr0 [+ gSr <=> 44100,+ gKr <=> 4410,+ gKsmps <=> 10,+ gNchnls <=> 1]++header = [setup]++-- gen routine+sinWave = gen10 4096 [1]++-- oscilator instrument+instr :: Irate -> SignalOut+instr x = out $ oscilA [] (num 1000) (cpspch x) sinWave++-- line, note - Score constructors (see CsoundExpr.Base.Score)+-- Score is a Functor, so it's possible to use instruments as+-- functions on abstract note representation.+-- here note is represented with pitch value of type Irate +-- (Irate is csound's init value) +--+sco = fmap instr $ line $ map (note 1) [d 0, f 0, a 0, d 1]+++-- toList - converts Score to EventList+dmCode = csd flags header $ toList sco++++
+ src/CsoundExpr/Tutorial/Limits.hs view
@@ -0,0 +1,83 @@++-- | This chapter explains some limitations and hack-features of library.+--+--+-- * Prev : "CsoundExpr.Tutorial.Orchestra"+--+-- * Next : <http://www.csounds.com/manual/html/index.html>+++module CsoundExpr.Tutorial.Limits ( + -- * What can not be expressed + + + -- ** ids+ {-| + The major benefit and major problem of csound-expression is + abscense of ids for p-fields, ftables, notes and instruments.+ + + no ids for ... means ... no ++ p-fields/notes - opcodes that rely on p-fields or invoke instruments++ ftables - k-rate ftables++ instruments - convenient way to specify order of instruments+ -}++ -- ** program flow control+ + -- | there is no program flow control opcodes (like if, then, goto)++ -- ** Srate++ -- | i've decided to represent csound's S-rate with 'String'.+ -- + -- Signal is represented with tree and it means i can't include+ -- opcodes that produce Srate++ -- * hack-way around (what somehow can be expressed)++ -- ** instrument order+ {-|+ Orchestra section is generated from 'EventList'. Different instruments+ have different tree structure and one instrument's tree can't be + transformed into another one by replacing leaf-values only. ++ You can point to instrument by its structure. There is opcode in + "CsoundExpr.Base.Header" that specifies order of instruments by+ list of notes. 'instrOrder' takes in list of notes, if instrument's+ tree is equivalent to note it is placed in relation to list of notes.++ There are ways to make mistake. Sometimes it's unpredictable. + + + In example below ++ @q1 =/= q2@++ @sco@ contains two instruments (one with @x@, and another one with @cpspch x@)++ >+ >osc x = oscilA [] (num 1000) x $ gen10 4096 [1]+ >env = lineK 1 idur 0+ >+ >q1 x = osc x <*> env+ >q2 x = env <*> osc x+ >+ >sco1 = note 1 440+ >sco2 = note 1 $ cpspch 8.00+ >+ >sco = fmap q1 $ sco1 +:+ sco2++ I think maybe it's worthwhile to introduce some way of instrument id+ assignment.+ -}++ + )++where++
+ src/CsoundExpr/Tutorial/Orchestra.hs view
@@ -0,0 +1,315 @@+-- | Guide to instrument-making+--+-- * Prev : "CsoundExpr.Tutorial.Composition"+--+-- * Next : "CsoundExpr.Tutorial.Limits"+++module CsoundExpr.Tutorial.Orchestra (++ -- * Instruments++ {-|+ Instruments are functions from some signal representation to signal. + 'Score' is a 'Functor', so to play on instrument means to apply instrument + to 'Score' of its notes. Instrument can be made with opcodes.+ Translator derives p-fields from instrument structure. There are only+ two explicit p-fields 'itime' and 'idur' (@p2@ and @p3@ in csound).+ -}++ exmpInstr,++ -- * Signals / Types++ {-|+ Signals are represented with trees. Tree contains information about how + signal was build. + + There are four types for signals ("CsoundExpr.Base.Types").++ 'Arate' is audio rate signal++ 'Krate' is control rate signal++ 'Irate' is init value+ + 'SignalOut' is no output at all (it's produced by opcodes like out, outs, xtratim) ++ + There are two classes to allow csound's polymorphism : 'X' and 'K'++ 'X' = 'Arate' | 'Krate' | 'Irate'++ 'K' = 'Krate' | 'Irate'+++ Csound's S - signal is represented with 'String'.+ Ftable is represented with 'Irate'.++ + There are two special types 'MultiOut' + (for opcodes that may produce several outputs, see "CsoundExpr.Base.MultiOut")+ and 'SideEffect' + (for opcodes that rely on number of appearances in csound code, + like @unirand@, see "CsoundExpr.Base.SideEffect") + -}++ -- * Opcodes ++ {-|+ Naming conventions : Opcodes are named after csound's counterparts usually.+ Some opcodes in csound can produce signals of different rates by request (oscil, linseg).+ Those opcodes are labelled with suffix. Suffix defines output rate of signal (oscilA, oscilK). + Some opcodes in csound have unfixed number of inputs due to setup parameters, almost all of them.+ Those opcodes have first argument that is list of setup parameters.++ example++ >oscilA :: (X a, X b) => [Irate] -> a -> b -> Irate -> Arate+ >oscilK :: (K a, K b) => [Irate] -> a -> b -> Irate -> Krate + -}+++ -- * Imperative style csound code+ + {-|+ Most of csound opcodes can be used in functional way. You can plug them in one another, + and make expressions, but some of them behave like procedures and rely on order + of execution in instrument. Module "CsoundExpr.Base.Imperative" provides functions+ to write imperative csound code. ++ 'outList' - to sequence procedures++ '(/<=/>)' - Assignment++ 'ar', 'kr', 'ir', 'gar', 'gkr', 'gir' - named values, to produce signal with specified name and rate.++ + Functional style :++ >exmpInstr :: Irate -> SignalOut+ >exmpInstr pch = out $ oscilA [] (num 1000) (cpspch pch) $ gen10 4096 [1]+++ Imperative style :++ >exmpImper :: Irate -> SignalOut + >exmpImper pch = outList [ + > ir "amp" <=> num 1000,+ > ir "cps" <=> cpspch pch,+ > ir "ft" <=> gen10 4096 [1],+ > ar "sig" <=> oscilA [] (ir "amp") (ir "cps") (ir "ft"),+ > out (ar "sig")]++ -}+ + exmpImper,+ -- * Arithmetic+ {-|+ You can use polymorphic operations to do some arihmetic on signals + from "CsoundExpr.Base.Arithmetic". And Signal is 'Num'. 'Eq' is undefined though. + -}++ exmpArith,+ -- * Preview++ {-|+ To see what will come out of an expression you can print it. Signal is 'Show'.+ -}+ exmpPreview,+++ -- * User Defined opcodes++ {-|+ You can add your own opcodes to library, see "CsoundExpr.Base.UserDefined"+ -}++ -- * MIDI + + {-|+ There are two ways to tell 'csd' to include instrument in csound file. + Instrument can be a part of 'Score' or it can be midi instrument, then it should+ be mentioned in 'massign' or 'pgmassign' function. If you want to play midi-instr+ for some time @t@, you can tell it to 'csd' function by invoking 'csd' with @'rest' t@+ in place of 'EventList' value.++ >flags = "-odac -iadc -+rtmidi=virtual -M0"+ >+ >header = [massign [] 1 instrMidi]+ >+ >instrMidi :: SignalOut+ >instrMidi = out $ oscilA [] (num 1000) cpsmidi $ gen10 4096 [1]+ >+ >-- play instrMidi for 2 minutes+ >exmpMidi = print $ csd flags header (rest 120)++ -}+ exmpMidi,++ -- * Example + -- | Song, see src++ main+)++ where++import CsoundExpr.Base+import CsoundExpr.Base.Pitch+import CsoundExpr.Opcodes hiding (delay)++------------------------------------++exmpInstr :: Irate -> SignalOut+exmpInstr pch = out $ oscilA [] (num 1000) (cpspch pch) $ gen10 4096 [1]++exmpImper :: Irate -> SignalOut +exmpImper pch = outList [ + ir "amp" <=> num 1000,+ ir "cps" <=> cpspch pch,+ ir "ft" <=> gen10 4096 [1],+ ar "sig" <=> oscilA [] (ir "amp") (ir "cps") (ir "ft"),+ out (ar "sig")]+++exmpArith pch = out $ (env <*>) $ oscilA [] (num 1000) (cpspch pch) $ gen10 4096 [1]+ where env = lineK 1 idur 0+++exmpPreview = mapM_ print $ map ( $ (a 1)) [exmpInstr, exmpImper, exmpArith] ++flagsMidi = "-odac -iadc -+rtmidi=virtual -M0"++header = [massign [] 1 instrMidi]++instrMidi :: SignalOut+instrMidi = out $ oscilA [] (num 1000) cpsmidi $ gen10 4096 [1]++-- play instrMidi for 2 minutes+exmpMidi = print $ csd flagsMidi header (rest 120)++----------------------------------------------------------------+----------------------------------------------------------------+-- Example+--+-- Song+--++mapSnd f (a, b) = (a, f b) ++flags = "-d"++dot = stretch 1.5++wn = note 1+hn = note 0.5+qn = note 0.25+en = note 0.125+++sinWave = gen10 4096 [1]+expWave = gen05 4096 [0.01, 4070, 1, 26, 0.01]++-- volume levels+--++v1 = 1.3 * v0+v0 = 10000 ++-- instruments+--++-- plucked++pluckInstr :: (Irate, Irate) -> SignalOut +pluckInstr (amp, pch) = outList [+ out $ env <*> wgpluck2 0.75 amp (cpspch pch) (num 0.75) (num 0.5), + xtratim 1]+ where env = linsegrK [0, idur * 0.05, 1, idur * 0.9, 1] 1 0 ++guitar = pluckInstr . mapSnd (+ (-1))+bass = pluckInstr . mapSnd (+ (-2))++-- drums++qCabasa = out $ cabasa [] 9000 0.01+qBamboo = out $ bamboo [] (num 2500) 0.01++shh = out $ (env <*> ) $ fst $ se1 $ unirandA (num 1000)+ where env = exponK 1 idur 0.001++-- aahs ++aahs :: Dur -> (Irate, Irate) -> SignalOut+aahs t (amp, pch) + | t < tShort = out $ env1 <*> osc pch+ | otherwise = outList [out $ env2 <*> osc pch, xtratim 1] + where osc x = oscilA [] amp (cpspch x) tab+ env1 = linsegK $ norm (ps ++ [0.025, 0])+ env2 = linsegrK (norm $ ps ++ [0.025, 1]) 1 0 + norm = zipWith (<*>) (cycle [1, idur])+ tab = gen10 4096 [1, 0.7, 0.2, 0.7] + tShort = 0.6/2 + ps = [0, 0.5, 0.2, 0.25, 0.3, 0.125, 0.5, 0.1, 1 :: Irate] +++-- piece+--++-- chords++bassChord, guitarChord :: (Irate, Irate, Irate, Irate) -> Score (Irate, Irate)++bassChord (n1, _, _, _) = loop 4 $ line $ map en [(v1, n1), (v0, n1), (v0, n1), (v0, n1)]++guitarChord (n1, n2, n3, n4) = line $ [qn (v1, n1)] ++ + map (dot . qn) [(v0, n3), (v0, n2), (v1, n4), (v0, n3)] ++ [qn (v0, n4)]+++ch1 = (b (-1), d 0, a 0, cs 1)+ch2 = ( d 0, fs 0, cs 1, d 1)+ch3 = (g (-1), a (-1), fs 0, g 0)++chordSeq = line $ map wn [ch1, ch2, ch1, ch3]++-- solo++soloNotes :: [Irate] -> Score (Irate, Irate)+soloNotes notes = stretch 2 $ + (line $ map return notes) >>= pulse++pulse :: Irate -> Score (Irate, Irate)+pulse = line . zipWith note durs . zip vols . repeat+ where vols = map ((0.3 * v0) *) [0.2, 0.4, 0.6, 0.8, 0.6, 0.4]+ durs = norm [1, 1.2 , 1, 1, 1, 1.5] + norm xs = map ( /sum xs) xs ++-- scores++scoBamboo = stretch 0.5 $ loop 15 $ delay 1 $ line $ map (note 1) $ replicate 3 qBamboo+scoCabasa = loop (4*16) $ line [rest 0.25, qn qCabasa]+scoShh = delay 2 $ loop 8 $ line [wn shh, rest 3]++scoDrums = chord [scoBamboo, delay 12 scoCabasa, delay 12 scoShh]++scoGuitar = fmap guitar $ chordSeq >>= guitarChord+scoBass = fmap bass $ chordSeq >>= bassChord++accomp = chord [+ delay 4 $ loop 5 scoGuitar, + delay 12 $ loop 4 scoBass, + scoDrums] ++scoAahs1 = loop 2 $ tmap aahs $ soloNotes [d 1, cs 1, e 0, fs 0]+scoAahs2 = loop 2 $ tmap aahs $ soloNotes [d 1, cs 1, a 0, d 0]+scoAahs3 = loop 2 $ tmap aahs $ soloNotes [a 0, cs 1, g 0, fs 0]++solo = delay 20 $ chord [+ scoAahs1,+ delay 5 $ stretch 1.3 scoAahs2,+ delay 7 $ stretch 1.5 scoAahs3]++sco = stretch 2.0 $ chord [solo, accomp] ++main = print $ csd flags headerMono $ toList sco