s"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,- . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                            ! Safe-Inferred&Class of monads generating identifers Identifiers are integers.  Evaluate m DF. "#"#None Composite of  and $.  Composite of % and . 'Class for values that can be lifted to . Sum type for wire values.  Vector type. Vector identifier.  of  of . Concise pretty printer and & instance for . 0 vec_concise (Vec (V_Id 0) 1 [0]) == "vec(0,1)" ' instance for . map k_typeOf [B False,I 0,F 0.0] == [bool_t,int32_t,float_t] Concise pretty printer and & instance for . ( (). ( of ). ( of *. ( of +. ( of ( +). # ,-./01234567   ,-./01234567None Map from 8 to colour name. ? map (ty_colour . Just) [int32_t,float_t] == ["orange","blue"] Left & right bracket. 4 w_bracket '(' ')' "parentheses" == "(parentheses)" Dot notation for  key,value attributes.  Dot node as record+. Constant values are drawn directly into  input ports. The nm 9 has the df_ prefix removed for  printing. " dot_rec 0 "nm" [] (Just float_t) Make arguments input for  from arity. Variant where  indicates no output.     None! Load graph. "Unload graph. !"!"!"!"None)#Enumeration of code hosts. '7List of constants, list of variables, list of c-calls. ((Type,Array,Label,Initialised) )Enumeration of variable types. -0C function call. (comment?,function,arguments) .+Qualified name, (structure,access,member). /C type. 0 C comment. 1Add comment markers.  c_comment "c" == "/* c */" 2 Translate 8 to /. " c_typerep_ctype bool_t == "bool" 2 c_typerep_ctype (typeOf (0.0::Float)) == "float" 3 Initialise . to value. + c_init_atom ("s",".","r") 5 == "s.m = 5;" 4 Initialise .. to array. Generates loop code for sequences  of equal initial values.  2 c_init_vec ("s",".","r") [0,1] == ["s.r[0] = 0;" 3 ,"s.r[1] = 1;"] 2 let r = ["for(int i=0;i < 2;i++) {s.r[i] = 0;}"] ( in c_init_vec ("s",".","r") [0,0] == r 5 Initialise . to value or array.  let {qn = ("s","->","r") D ;r = ["for(int i=0;i < 2;i++) {s->r[i] = 0;}","s->r[2] = 1;"]} ' in c_init_var qn (Right [0,0,1]) == r 6Qualify name if required. The rf flag indicates if array is a  reference or an allocation. 4 c_array_qual (Vec_Port float_t 3) "a" True == "*a" 7 c_array_qual (Vec_Port float_t 3) "a" False == "a[3]" 7Construct a function/ macro call. - c_call (Nothing,"f",["0","1"]) == "f(0,1);" 1 c_call ("c","f",["0","1"]) == "f(0,1); /* c */" 8The character prefix for a ( name is given by the ). 9( name. :Non-+ are stateful, ie. , and *. ;, are stateful and atoms. < Generate ( from . = Generate * from . >5 of (. ?( C declaration, rf determines 6 form. @ Generate a C struct for ( , predicate determines if array ) variables are refernces or allocations. AConstruct an identifier.  clabel (Std_Var,0) == "n_0" BA of +.  std_clabel 0 == "n_0" C Variant with m. prefix. D5 for constant. # c_const (0,I 1) == ["m.n_0 = 1;"] E9C declarations for DSP functions (memreq,init and step). F@The structure for all memory stores. In the uniform model this ? is a notational convenience only. In a partioned model it is  functional. GThe structure for stateful (. HGenerate dsp_memreq function. IGenerate dsp_init function. J Generate dsp_step function. KGenerate C code for graph. LHost specific #include file. MHost specific form of E (extern C where required). NGenerate compiler command for # given include directory  prefix. , host_compiler_cmd (JACK,"/home/rohan/opt") + host_compiler_cmd (SC3,"/home/rohan/opt") , host_compiler_cmd (Text,"/home/rohan/opt") O@Generate C code, write file to disk and call the GNU C compiler  to build shared library. PBracket list with elements. ( bracket ('<','>') "float" == "<float>" QIntegrate, with implicit 0.  dx_d [5,6] == [0,5,11] /#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ/#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ/01/2.3456-7),+*8(9:;<=>?@ABCDEFGHI'JK#&%$LMNOPQ)#&%$'(),+*-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQNoneRRun action with UDP link to jack-dl. S6Audition graph after sending initialisation messages. T Load graph. U6Audition graph after sending initialisation messages. V Audition at text-dl. RSTUVRSTUVRSTUVRSTUVNone=WFGL graph with pretty-printed c label. XFGL graph with c label. Y-A variant graph form associating the list of in edges with each  a. ZA graph is a list of as and [s. [7Edge from left hand side node to right hand side port. \Enumeration of [ types. ]Edge to recRd node (from recWr) ^Edge from recRd node _Edge to recWr node a A node is a c with associated . bIndex for input port. cUn-typed data-flow node. kRecursion identifier. mConcise pretty printer for c. nMaybe variant of j. o$List elements in left biased order. pOutput type of c. q#Traversal with state, signature as :. rPretty printer for \, and & instance. s of a. tc of a. uRead label of node. v&Transform node to source, see through f (rec) and d (mrg). wType of out edge of c. xList incoming node edges. yTrue if a is ; form of f with indicated k. zImplicit edge from wR to rW. {Is a i. |An [ is orphaned if it refers to a a that is not in the  node list. }:Transform the actual graph into a viewing graph by adding  implicit edges from recWr to recRd nodes. ~/Find edge with indicated right hand side port.  Variant of ~ that <s. "Trace in edges until arrival at a _ that is not  proceeded by an ]. This traces the depth of the - chain, however that is not currently drawn.  Transform ^ to resolved ]. Is a f. <Transform the actual graph into a viewing graph by deleting  recWr and recRd+ nodes and drawing a direct backward edge. >Label nodes and list incoming edges. Multiple-root nodes are  erased.  analyse (udf_elem c) *Generate graph (node list and edge list).   import Sound.DF.Uniform.GADT , import qualified Sound.DF.Uniform.UDF as U  ! let g = iir1 (0.0::Float) (+) 1  let c = df_erase g  " map U.udf_concise (U.udf_elem c) A > [recWr,df_add:Float,1.0,recRd:0.0,df_add:Float,1.0,recRd:0.0]   U.vgraph_direct (U.graph c) 5 > ([(1,wR_1),(2,df_add:Float),(3,1.0),(4,rR_1:0.0)]  > ,[(2,1,0),(3,2,0),(4,2,1)])  U.draw c  Generate X.  Generate W. Topological sort of nodes (via ). (List of required variable declarations.  Possible c-call code statement. Constant nodes.  Generate ' from c. O of . Make   arguments input. Dot notation of a. ,Edges are coloured according to their type. Dot notation of [. Dot notation of Z. View dot graph. Draw graph, transformed by . Draw graph, transformed by }. Make dot rendering of graph at a, via . Make dot rendering of graph at a, via }. Draw graph, via . Draw graph, via . 6Audition graph after sending initialisation messages. 6Audition graph after sending initialisation messages.  Audition at text-dl. GWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~=FWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Fklcigfedjhmnopqba\`_^]r[ZYstuvwxyz{|}~XW;WXYZ[\`_^]abcigfedjhklmnopqrstuvwxyz{|}~=None~ FGL graph of . A graph is a list of  and a list of s. Primitive edge, left hand , right hand side  , right hand   and edge type. "Primitive block diagram elements. A  runs between two Ports. Enumeration of wire types. Implicit wire from recWr to recRd. Implicit wire from node to recWr. Implicit wire from recRd to node. Backward edge. Normal forward edge. )Port (input or output) at block diagram. The index of an , all outputs are unary. Node degree as (input,output) pair. Block diagram. The write and read s, and the wire type. Read identifier.  Erroring . Pretty printer for . Diagram type signature, ie.  at . Type of output ports of . Type of uniform output ports of . Type of singular output port of . .Faust uses single tilde, which is reserved by GHC.Exts. 'Faust uses comma, which is reserved by  Data.Tuple , and indeed  ~, is not legal either.  Faust uses :, which is reserved by  Data.List.  Faust uses <:, which is legal, however see .  Faust uses :> , however : is not allowed as a prefix. * draw (graph (par_l [1,2,3,4] ~:> i_mul)) + draw (graph (par_l [1,2,3] ~:> i_negate))  Fold over , signature as >. #Traversal with state, signature as :. 5 nodes introduce identifiers for each backward arc. k is  the initial , n the number of arcs, and ty the arc types. @ rec_ids 5 2 [int32_t,float_t] == [(5,6,int32_t),(7,8,float_t)] Set identifiers at , , and  nodes.  of block diagram . ? of . @ of . The left and right outer ports of a block diagram. Type of . Set of  wires between s. Set of  wires between s. -Immediate internal wires of a block diagram. #Internal wires of a block diagram. A wire coheres if the " of the left and right hand sides  are equal. *The set of non-coherent wires at diagram. Coherence predicate, ie. is  empty. Extract the current actual node id from . Output type of , if out degree non-zero. Either  or  of . Pair   with node. Pretty printer, and & instance. Is  of  .  Implicit rec nodes. 0Collect all primitive nodes at a block diagram.  A backward  will introduce three implicit edges, a   wire introduces one  edge. A of .  of .  Construct * of block diagram, either with or without  implicit edges.  Construct  of block diagram without implicit edges. = This graph will include backward arcs if the graph contains recs.  Transform  to . Topological sort of nodes (via ). Make dot rendering of graph at .  of . Dot description of . &Wires are coloured according to type. Dot description of . Dot description of . Draw dot graph.  of . Fold of . # degree (par_l [1,2,3,4]) == (0,4) * draw (graph (par_l [1,2,3,4] ~:> i_mul)) Type-directed sum. ! draw (graph (bd_sum [1,2,3,4])) Predicate to determine if p can be split onto q. split if diagrams cohere. split if diagrams cohere, else <. Synonym of . 6If merge is legal, the number of in-edges per port at q. 1 merge_degree (par_l [1,2,3]) i_negate == Just 3 0 merge_degree (par_l [1,2,3,4]) i_mul == Just 2 merge if diagrams cohere. " merge_m (par_l [1,2,3]) i_negate ! merge_m (par_l [1,2,3,4]) i_mul merge if diagrams cohere, else <. Synonym of . Predicate to determine if p can be rec onto q. rec if diagrams cohere. rec if diagrams cohere, else <. Synonym of . Integer constant. Real constant. Construct uniform type primitive diagram.  of .  of . Adddition, ie. B of $.  (1 ~. 2) ~: i_add  (1 :: BD) + 2 Adddition, ie. B of $.  (1 ~. 2) ~: i_add  (1 :: BD) + 2 Subtraction, ie. C of $. Subtraction, ie. C of $. Multiplication, ie. D of $. Multiplication, ie. D of $. Division, ie. E of F.  Division, ie. G of H.  Absolute value, ie. I of $.  Absolute value, ie. I of $.  Negation, ie. J of $.  Negation, ie. J of $. Identity diagram. Identity diagram. Coerce  to . Coerce  to . ! and then scale to be in (-1,1). Single channel output.  degree out1 == (1,0) % bd_signature out1 == ([float_t],[]) Type following unary operator.  Type following binary operator. -Type following math operator, uniform types.  1.0 `ty_add` 2.0 == r_add % (1 ~. 2) `ty_add` (3 ~. 4) == i_add  1.0 `ty_add` 2 == _|_ $ draw (graph ((1 ~. 2) - (3 ~. 4))) -Type following math operator, uniform types.  1.0 `ty_add` 2.0 == r_add % (1 ~. 2) `ty_add` (3 ~. 4) == i_add  1.0 `ty_add` 2 == _|_ $ draw (graph ((1 ~. 2) - (3 ~. 4))) -Type following math operator, uniform types.  1.0 `ty_add` 2.0 == r_add % (1 ~. 2) `ty_add` (3 ~. 4) == i_add  1.0 `ty_add` 2 == _|_ $ draw (graph ((1 ~. 2) - (3 ~. 4))) -Type following math operator, uniform types.  1.0 `ty_add` 2.0 == r_add % (1 ~. 2) `ty_add` (3 ~. 4) == i_add  1.0 `ty_add` 2 == _|_ $ draw (graph ((1 ~. 2) - (3 ~. 4))) .Type following math operator, singular types.  1.0 `ty_add1` 2.0 == r_add  1.0 `ty_add1` 2 == _|_ .Type following math operator, singular types.  1.0 `ty_add1` 2.0 == r_add  1.0 `ty_add1` 2 == _|_ .Type following math operator, singular types.  1.0 `ty_add1` 2.0 == r_add  1.0 `ty_add1` 2 == _|_ List of constants for CGen. ( of . Output reference for .  Input references for . !- of . "Generate CGen ' for . #6Audition graph after sending initialisation messages. $Figure illustrating .  degree fig_3_2 == (2,2)  draw (graph fig_3_2) %Figure illustrating .  degree fig_3_3 == (4,1)  bd_signature fig_3_3  draw (graph fig_3_3) &Figure illustrating .  degree fig_3_4 == (0,3)  draw (graph fig_3_4) 'Figure illustrating .  degree fig_3_5 == (0,1)  draw (graph fig_3_5) (Figure illustrating .  degree fig_3_6 == (0,1)  draw (graph fig_3_6) )"Variant generating audible graph.  draw (graph fig_3_6')  gr_draw fig_3_6'  audition [] fig_3_6' *A counter, illustrating identity diagram. & draw (graph (i_counter ~: i_negate)) ! gr_draw (i_counter ~: i_negate) +Adjacent elements of list. " adjacent [1..4] == [(1,2),(3,4)] ,Bimap at tuple. # bimap abs negate (-1,1) == (1,-1)       !"#$%&'()*+,KLM      !"#$%&'()*+,      !"#$%&'()*+,|      !"#$%&'()*+,KLMNoneW  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV None'-"Data flow node with phantom type. 0Constant with phantom type. 3Lift * to constant, ie. 0 of  . 4Lift + to constant, ie. 0 of  . 5!A zero with unresolved type, ie. 0 of   of 0. 6Lift * to -. 7Lift + to -. 8Tables have a guard point. 9Multiple root graph. :( -. ;- of e. <Primitive unary operator. =Primitive binary operator. >Primitive comparator. ?Primitive sink. @?Primitive unary operator with separate primitives for integral  and floating types. ALift list of float to - . BN , equal to. CO , less than. DP, greater than or equal to. EQ, greater than. FR, less than or equal to. G ceilf(3) H floorf(3) I lrintf(3) J roundf(3) KSingle channel output. LTwo channel output. MThree channel output. NSingle control input. OIf p then q else r. p must have type bool, and q  and r must have equal types. POperating sample rate. QBuffer read, read from buffer p at index q. RBuffer write, write to buffer p at index q value r. S Array read. T Array write. U1Introduce backward arc with implicit unit delay. VMonadic variant of rec_r. W4Variant or rec with monadic action in backward arc. 0-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWSTUVW+-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW+012-./3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWSTUVW NoneX6Audition graph after sending initialisation messages. Y6Audition graph after sending initialisation messages. Z Audition at text-dl. XYZXYZXYZXYZ None[View graph using graphviz. [\[\[\[\None4-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\ None<]Binary function. ^Senary operator. _Quinary operator. `Quaternary operator. aTernary operator. bBinary operator. cUnary operator. dData flow node. mTypeable instance for d. - df_typeOf (C (undefined::Int32)) == int32_t - df_typeOf (C (undefined::Float)) == float_t ( df_typeOf (A undefined) == vec_float_t $ df_typeOf (0::DF Int32) == int32_t & df_typeOf (0.0::DF Float) == float_t nName of primitive if d is i or h etc. o#Multiple root graph (alias for M). pd  constructor. qMonadic d  constructor. rd  size. sr% variant, tables have a guard point. tUnary operator. uBinary operator. vBinary operator. wd multiply and add. x@Optimising addition primitive. If either input is a multiplier ( node, unfold to a multiplier-add node. ' df_add_optimise (2 * 3) (4::DF Int32) ' df_add_optimise (2::DF Int32) (3 * 4) y Data.Bits .&.. z Data.Bits .|.. { Data.Bits  complement. |N , equal to. }O , less than. ~P, greater than or equal to. Q, greater than. R, less than or equal to. X, select maximum. Y, select minimum.  Cast floating point to integer.  Cast integer to floating point. Scale * to (-1,1) normalised +. ! maxBound == (2147483647::Int32) Integral modulo, ie. Z. Floating point modulo, ie. Foreign.C.Math fmodf.  ceilf(3)  floorf(3)  lrintf(3)  roundf(3) 1Introduce backward arc with implicit unit delay. >The function receives the previous output as input, initially y0,  and returns a (feed-forward,feed-backward) pair. / rec_r (R_Id 0) (0::Int) ((\i->(i,i)) . (+) 1) 5 rec_r (R_Id 0) (0.0::Float) ((\i->(i,i)) . (+) 1.0) Monadic variant of . Hash-eq variant of .  Variant of & with monadic action in backward arc. "Single channel input (channel 0). #Single channel output (channel 0). Two channel output (channels 1 & 2). Three channel output. Single control input. Logical [. Logical \. Logical ]. If p then q else r. p must have type bool, and q  and r must have equal types. Operating sample rate. ,Number of frames in current control period. ^( at first frame of each control period. Buffer read, read from buffer p at index q. Buffer write, write to buffer p at index q value r.  Array read.  Array writ. Transform typed d to un-typed c. H]^_`abcdefghijklmnopqrstuvwxyz{|}~_`abD]^_`abcdefghijklmnopqrstuvwxyz{|}~Ddlkjihgfemnopqrscba`_^]tuvwxyz{|}~@]^_`abcdlkjihgfemnopqrstuvwxyz{|}~_`ab NoneAudition graph at jack-dl( after sending initialisation messages. Audition graph at SC3( after sending initialisation messages. Audition graph at text-dl. NoneQ5-tuple  Duplicate a value into a tuple.  split 1 == (1,1) !Reversed tuple constructor, (ie. flip (,))  swap 2 1 == (1,2) Two pi.  two_pi == 6.283185307179586 'Midi note number to cycles per second.  midi_cps 69 == 440 Multiply and add. G map (mul_add 2 3) [1,2] == [5,7] && map (mul_add 3 4) [1,2] == [7,10] :Calculate feedback multipler in comb filter circuit given delay  and decay times. ' calc_fb 0.2 3.0 == 0.6309573444801932 Linear range conversion.  3 map (\i -> lin_lin i (-1) 1 0 1) [-1,-0.9 .. 1.0]  do {s <- lf_saw 1.0 0.0 9 ;o <- sin_osc (lin_lin s (-1.0) 1.0 220.0 440.0) 0.0 # ;audition [] (out1 (o * 0.1))} Exponential range conversion.  , map (\i -> lin_exp i 1 2 1 3) [1,1.1 .. 2]  do {s <- lf_saw 0.25 0.0 > ;o <- sin_osc (lin_exp (s + 1.0) 0.0 2.0 220.0 440.0) 0.0 # ;audition [] (out1 (o * 0.1))} Constrain p in (-q,q). $ let r = -10 : -10 : [-10,-9 .. 10] - in map (flip clip2 10) [-12,-11 .. 12] == r sr = sample rate, r = cycle (two-pi), hz = frequency  hz_to_incr 48000 128 375 == 1 3 hz_to_incr 48000 two_pi 458.3662361046586 == 6e-2  Inverse of .  incr_to_hz 48000 128 1 == 375  Linear pan.  6 map (lin_pan2 1) [-1,0,1] == [(1,0),(0.5,0.5),(0,1)]  do {o <- sin_osc 440.0 0.0  ;l <- sin_osc 0.5 0.0 & ;let (p,q) = lin_pan2 (o * 0.1) l  in audition [] (out2 p q)} #Compile time sample rate constant. Environment value, equal to  / . Add guard point.  tbl_guard [1,2,3] == [1,2,3,1] Generate guarded sin table. T map (round . (* 100)) (tbl_sin 12) == [0,50,87,100,87,50,0,-50,-87,-100,-87,-50,0] If 'q >= p' then 'q - p' else q.  variant.  do {o <- sin_osc 440 0 0 ;audition [] (out1 (df_clip2 (o * 2) 0.1))} =Single place infinite impulse response filter with indicated  initial value.   import Data.Int  import Sound.DF.Uniform.GADT  import Sound.DF.Uniform.LL.K  draw (iir1 (0::Int32) (+) 1)  draw (iir1 (0::Float) (+) 1) r = right hand edge, ip = initial phase, x = increment $ draw (phasor 9.0 (4.5::Float) 0.5)  draw (phasor 9 (0::Int32) 1)  Allocate n second array, variant of p. Array delay with phasor argument for write index.  Array delay.   do {a <- df_vec_m [0,1,2]  ;draw (a_delay a 0.0 0)}  let {f = sin_osc 0.1 0.0 * ;o = sin_osc (f * 200.0 + 600.0) 0.0 . ;a = df_vec (V_Id 0) (replicate 48000 0)  ;d = a_delay a o 24000} , in audition [] (out2 (o * 0.1) (d * 0.05)) Array fill function (sin).  do {i <- phasor 64 0 1  ;a = a_tbl_sin (V_Id 0) 64  ;let s = a_read a i & in audition [] (out1 (s * 0.2))}  Linear interpolating variant of . > let {i = phasor 64.0 0 (hz_to_incr k_sample_rate 64.0 330.0)  ;a = a_tbl_sin (V_Id 0) 64  ;s = a_lerp a i} ! in audition [] (out1 (s * 0.2))  for table of z places. ip is in (0,1). G draw (phasor 64.0 (0.0::Float) (hz_to_incr k_sample_rate 64.0 330.0))  draw (tbl_phasor 64 0.0 330.0) Table lookup oscillator. ip is in (0,1).  ! let {a = a_tbl_sin (V_Id 0) 256  ;f = a_osc a 4.0 0.0 + ;o = a_osc a (f * 200.0 + 400.0) 0.0} ! in audition [] (out1 (o * 0.1)) Cancellation: ! let {a = a_tbl_sin (V_Id 0) 256  ;o1 = a_osc a 440.0 0.0  ;o2 = a_osc a 440.0 0.5} ! in audition [] (out1 (o1 + o2)) 2Single sample delay with indicated initial value.   draw (unit_delay (0::Int32) 1) $ draw (unit_delay (0.0::Float) 1.0)  let {c = counter 0.0 1.0  ;d = unit_delay 0.0 c}  in audition_text 12 (out2 c d) 9Two place infinite impulse response filter. Inputs are: f=  function (x0 y1 y2 -> y0), i = input signal. * let {c1 = iir2 (\x y1 _ -> x + y1) 0.001 " ;o1 = sin_osc (c1 + 220.0) 0 * ;c2 = iir2 (\x _ y2 -> x + y2) 0.001 # ;o2 = sin_osc (c2 + 220.0) 0} - in audition [] (out2 (o1 * 0.1) (o2 * 0.1)) -Single place finite impulse response filter. *Two place finite impulse response filter.  Ordinary biquad filter section. &Counter from indicated initial value.   draw (counter (0::Int32) 1) ! draw (counter (0.0::Float) 1.0) + audition_text 10 (out1 (counter 0.0 1.0)) Buffer delay.  draw (buf_delay 0 0.0 0) ,Non-interpolating comb filter. Inputs are: b = buffer index,  i = input signal, dl = delay time, dc = decay time. >All times are in seconds. The decay time is the time for the  echoes to decay by 60- decibels. If this time is negative then the B feedback coefficient will be negative, thus emphasizing only odd  harmonics at an octave lower.  ( draw (out1 (buf_comb_n 0 0.0 0.0 0.0)) ?Comb used as a resonator. The resonant fundamental is equal to  reciprocal of the delay time.  ! import qualified Sound.SC3 as S   let {n = white_noise 0 ; ;dt = let f x = lin_exp (x + 2.0) 1.0 2.0 0.0001 0.01 ! in f (lf_saw 0.1 0.0) ) ;c = buf_comb_n 0 (n * 0.1) dt 0.2} , in audition [S.b_alloc 0 48000 1] (out1 c) Comb used as an echo.  let {i = impulse 0.5 0.0  ;n = white_noise 0  ;e = decay (i * 0.5) 0.2 ( ;c = buf_comb_n 0 (e * n) 0.2 3.0} , in audition [S.b_alloc 0 48000 1] (out1 c) Array variant of !. Max delay time is in seconds.   let {n = white_noise 0 ; ;dt = let f x = lin_exp (x + 2.0) 1.0 2.0 0.0001 0.01 ! in f (lf_saw 0.1 0.0) 0 ;c = comb_n (V_Id 0) 0.1 (n * 0.1) dt 0.2}  in audition [] (out1 c)  let {i = impulse 0.5 0.0  ;n = white_noise 0  ;e = decay (i * 0.5) 0.2 / ;c = comb_n (V_Id 0) 0.2 (e * n) 0.2 3.0}  in audition [] (out1 c) *7 linear congruential generator, hence signed modulo of  2^327. Note that the state and all internal math is 32bit. See  :http://en.wikipedia.org/wiki/Linear_congruential_generator  for possible parameters. . 1103515245 12345, so in (minBound,maxBound). I of 'lcg_glibc, so in (0,maxBound).  of , so in (0,1). # audition_text 24 (out1 (randf 0)) >White noise (-1,1). Generates noise whose spectrum has equal  power at all frequencies.  ) audition_text 24 (out1 (white_noise 0))   let n = white_noise 0 * 0.1  in draw (out1 (n - n))  let {n = white_noise 0 * 0.1  ;m = white_noise 5 * 0.1}  in audition [] (out1 (n - m))  brown noise function. ABrown noise (-1,1). Generates noise whose spectrum falls off in  power by 6 dB per octave.   let n = brown_noise 0 ! in audition [] (out1 (n * 0.1))  let {n = brown_noise 0 + ;f = lin_exp n (-1.0) 1.0 64.0 9600.0  ;o = sin_osc f 0} ! in audition [] (out1 (o * 0.1)) Sine oscillator. Inputs are: f = frequency (in hz), ip =  initial phase.   let o = sin_osc 440.0 0.0 ! in audition [] (out1 (o * 0.1)) !Used as both Oscillator and LFO.   let {f = sin_osc 4.0 0.0 + ;o = sin_osc (f * 200.0 + 400.0) 0.0} ! in audition [] (out1 (o * 0.1)) Cancellation.  let {o1 = sin_osc 440.0 0.0  ;o2 = sin_osc 440.0 pi} ! in audition [] (out1 (o1 + o2)) 'Impulse oscillator (non band limited). 2 Outputs non band limited single sample impulses.  Inputs are: f = frequency (in hertz), ip = phase offset (0..1)   let o = impulse 800.0 0.0 ! in audition [] (out1 (o * 0.1)) - let {f = sin_osc 0.25 0.0 * 2500.0 + 2505.0  ;o = impulse f 0.0} ! in audition [] (out1 (o * 0.1)) DNon-band limited sawtooth oscillator. Output ranges from -1 to +1.  Inputs are: f = frequency (in hertz), ip = initial phase (0,2).   let o = lf_saw 500.0 1.0 ! in audition [] (out1 (o * 0.1)) !Used as both Oscillator and LFO.  let {f = lf_saw 4.0 0.0 * ;o = lf_saw (f * 400.0 + 400.0) 0.0} ! in audition [] (out1 (o * 0.1)) ?Non-band-limited pulse oscillator. Outputs a high value of one & and a low value of zero. Inputs are: f = frequency (in hertz),  ip = initial phase (0,1), w! = pulse width duty cycle (0,1). 0 let {o1 = lf_pulse 3.0 0.0 0.3 * 200.0 + 200.0 & ;o2 = lf_pulse o1 0.0 0.2 * 0.1}  in audition [] (out1 o2) Two zero fixed midpass filter. Two zero fixed midcut filter. Two point average filter Two zero fixed lowpass filter Given cf construct  one-pole function. One pole filter.  let {n = white_noise 0 # ;f = one_pole (n * 0.5) 0.95}  in audition [] (out1 f) Given cf construct  one-zero function. One zero filter.  let {n = white_noise 0 " ;f = one_zero (n * 0.5) 0.5}  in audition [] (out1 f) Given coefficients construct   function. Second order filter section. Given f and rq construct   function. /A two pole resonant filter with zeroes at z = +/- 1. Based on  K. Steiglitz, "*A Note on Constant-Gain Digital Resonators",  Computer Music Journal(, vol 18, no. 4, pp. 8-10, Winter 1994. E The reciprocal of Q is used rather than Q because it saves a divide & operation inside the unit generator.  Inputs are: i = input signal, f = resonant frequency (in  hertz), rq+ = bandwidth ratio (reciprocal of Q);where rq =  bandwidth / centerFreq.   let {n = white_noise 0 & ;r = resonz (n * 0.5) 440.0 0.1}  in audition [] (out1 r) Modulate frequency  let {n = white_noise 0 + ;f = lf_saw 0.1 0.0 * 3500.0 + 4500.0 # ;r = resonz (n * 0.5) f 0.05}  in audition [] (out1 r) Given f and r construct   function. &Resonant low pass filter. Inputs are: i = input signal, f =  frequency (hertz), rq = reciprocal of Q (resonance).  let {n = white_noise 0 * ;f = sin_osc 0.5 0.0 * 40.0 + 220.0  ;r = rlpf n f 0.1}  in audition [] (out1 r) 52nd order Butterworth high-pass filter coefficients. # hpf_c 48000.0 (440.0 :: DF Float)  of .  0.  of .  trigger function. -True on non-positive to positive transition. Count ^ values at input.  let n = white_noise 0 7 in audition_text 12 (out2 n (count_true (trigger n))) Pulse divider at ). SC3  PulseDivider.  let n = white_noise 0 5 in audition_text 12 (out2 n (pulse_divider' n 2 1)) BSample and hold. Holds input signal value when triggered. Inputs  are: i = input signal, t = trigger.  let {n = white_noise 0  ;i = impulse 9.0 0.0  ;l = latch n (trigger i) + ;o = sin_osc (l * 400.0 + 500.0) 0.0} ! in audition [] (out1 (o * 0.2)) Given dt construct   function. Exponential decay. Inputs are: i = input signal, t = decay ? time. This is essentially the same as Integrator except that E instead of supplying the coefficient directly, it is caculated from E a 60 dB decay time. This is the time required for the integrator to C lose 99.9 % of its value or -60dB. This is useful for exponential + decaying envelopes triggered by impulses. Used as an envelope.  let {n = brown_noise 0  ;f = lf_saw 0.1 0.0 6 ;i = impulse (lin_lin f (-1.0) 1.0 2.0 5.0) 0.25  ;e = decay i 0.2}  in audition [] (out1 (e * n)) !Exponential decay (equivalent to decay dcy - decay atk). Single sample delay. Two sample delay. Given t construct   function. &Simple averaging filter. Inputs are: i = input signal, t =  lag time.  let {s = sin_osc 0.05 0.0 + ;f = lin_lin s (-1.0) 1.0 220.0 440.0  ;o = sin_osc f 0.0  ;f' = lag f 1.0  ;o' = sin_osc f' 0.0} , in audition [] (out2 (o * 0.2) (o' * 0.2)) Nested lag filter. Twice nested lag filter. QQQQNone'=Single place infinite impulse response filter with indicated  initial value.  import Data.Int  import Sound.DF.Uniform.GADT " draw =<< iir1_m (0::Int32) (+) 1 " draw =<< iir1_m (0::Float) (+) 1 r = right hand edge, ip = initial phase, x = increment ( draw =<< phasor_m 9.0 (4.5::Float) 0.5 ! drawM (phasor_m 9 (0::Int32) 1)  Allocate n second array, variant of p.  Array delay.   do {a <- df_vec_m [0,1,2]  ;d <- a_delay a 0.0 0  ;draw (a_delay a 0.0 0)}  do {f <- sin_osc 0.1 0.0 * ;o <- sin_osc (f * 200.0 + 600.0) 0.0 ' ;a <- df_vec_m (replicate 48000 0)  ;d <- a_delay a o 24000 . ;audition [] (out2 (o * 0.1) (d * 0.05))} Array fill function (sin).  for table of z places. ip is in (0,1). H drawM (phasor 64.0 (0.0::Float) (hz_to_incr k_sample_rate 64.0 330.0)) ! drawM (tbl_phasor 64 0.0 330.0) Table lookup oscillator. ip is in (0,1).   do {a <- a_tbl_sin 256  ;f <- a_osc a 4.0 0.0 * ;o <- a_osc a (f * 200.0 + 400.0) 0.0 # ;audition [] (out1 (o * 0.1))} Cancellation:  do {a <- a_tbl_sin 256  ;o1 <- a_osc a 440.0 0.0  ;o2 <- a_osc a 440.0 0.5 # ;audition [] (out1 (o1 + o2))} 2Single sample delay with indicated initial value.  # drawM (unit_delay_m (0::Int32) 1) ' drawM (unit_delay_m (0.0::Float) 1.0)  do {c <- counter_m 0 1.0  ;d <- unit_delay_m 0 c " ;audition_text 12 (out2 c d)} 9Two place infinite impulse response filter. Inputs are: f=  function (x0 y1 y2 -> y0), i = input signal. * do {c1 <- iir2 (\x y1 _ -> x + y1) 0.001 " ;o1 <- sin_osc (c1 + 220.0) 0 * ;c2 <- iir2 (\x _ y2 -> x + y2) 0.001 " ;o2 <- sin_osc (c2 + 220.0) 0 / ;audition [] (out2 (o1 * 0.1) (o2 * 0.1))} -Single place finite impulse response filter. *Two place finite impulse response filter.  Ordinary biquad filter section. &Counter from indicated initial value.   draw =<< counter (0::Int32) 1 " drawM (counter (0.0::Float) 1.0) / audition_text 10 . out1 =<< counter_m 0.0 1.0 Buffer delay.  drawM (buf_delay 0 0.0 0) ,Non-interpolating comb filter. Inputs are: b = buffer index,  i = input signal, dl = delay time, dc = decay time. >All times are in seconds. The decay time is the time for the  echoes to decay by 60- decibels. If this time is negative then the B feedback coefficient will be negative, thus emphasizing only odd  harmonics at an octave lower.  . drawM (fmap out1 (buf_comb_n 0 0.0 0.0 0.0)) ?Comb used as a resonator. The resonant fundamental is equal to  reciprocal of the delay time.  ! import qualified Sound.SC3 as S   do {n <- white_noise_m ; ;dt <- let f x = lin_exp (x + 2.0) 1.0 2.0 0.0001 0.01 & in fmap f (lf_saw 0.1 0.0) ( ;c <- buf_comb_n 0 (n * 0.1) dt 0.2 . ;audition [S.b_alloc 0 48000 1] (out1 c)} Comb used as an echo.  do {i <- impulse 0.5 0.0  ;n <- white_noise_m  ;e <- decay (i * 0.5) 0.2 ' ;c <- buf_comb_n 0 (e * n) 0.2 3.0 . ;audition [S.b_alloc 0 48000 1] (out1 c)} Array variant of !. Max delay time is in seconds.   do {n <- white_noise_m ; ;dt <- let f x = lin_exp (x + 2.0) 1.0 2.0 0.0001 0.01 & in fmap f (lf_saw 0.1 0.0) & ;c <- comb_n 0.1 (n * 0.1) dt 0.2  ;audition [] (out1 c)}  do {i <- impulse 0.5 0.0  ;n <- white_noise_m  ;e <- decay (i * 0.5) 0.2 % ;c <- comb_n 0.2 (e * n) 0.2 3.0  ;audition [] (out1 c)} >White noise (-1,1). Generates noise whose spectrum has equal  power at all frequencies.  do {n <- white_noise_m # ;audition [] (out1 (n * 0.1))} ABrown noise (-1,1). Generates noise whose spectrum falls off in  power by 6 dB per octave.   do {n <- brown_noise_m # ;audition [] (out1 (n * 0.1))}  do {n <- brown_noise_m . ;let f = lin_exp n (-1.0) 1.0 64.0 9600.0  in do {o <- sin_osc f 0 + ;audition [] (out1 (o * 0.1))}} Sine oscillator. Inputs are: f = frequency (in hz), ip =  initial phase.   do {o <- sin_osc 440.0 0.0 # ;audition [] (out1 (o * 0.1))} !Used as both Oscillator and LFO.   do {f <- sin_osc 4.0 0.0 * ;o <- sin_osc (f * 200.0 + 400.0) 0.0 # ;audition [] (out1 (o * 0.1))} Cancellation.  do {o1 <- sin_osc 440.0 0.0  ;o2 <- sin_osc 440.0 pi # ;audition [] (out1 (o1 + o2))} 'Impulse oscillator (non band limited). 2 Outputs non band limited single sample impulses.  Inputs are: f = frequency (in hertz), ip = phase offset (0..1)   do {o <- impulse 800.0 0.0 # ;audition [] (out1 (o * 0.1))} > do {f <- fmap (\x -> x * 2500.0 + 2505.0) (sin_osc 0.25 0.0)  ;o <- impulse f 0.0 # ;audition [] (out1 (o * 0.1))}  DNon-band limited sawtooth oscillator. Output ranges from -1 to +1.  Inputs are: f = frequency (in hertz), ip = initial phase (0,2).   do {o <- lf_saw 500.0 1.0 # ;audition [] (out1 (o * 0.1))} !Used as both Oscillator and LFO.  do {f <- lf_saw 4.0 0.0 ) ;o <- lf_saw (f * 400.0 + 400.0) 0.0 # ;audition [] (out1 (o * 0.1))}  ?Non-band-limited pulse oscillator. Outputs a high value of one & and a low value of zero. Inputs are: f = frequency (in hertz),  ip = initial phase (0,1), w! = pulse width duty cycle (0,1). A do {o1 <- fmap (\x -> x * 200.0 + 200.0) (lf_pulse 3.0 0.0 0.3) 6 ;o2 <- fmap (\x -> x * 0.1) (lf_pulse o1 0.0 0.2)  ;audition [] (out1 o2)}  Two zero fixed midpass filter.  Two zero fixed midcut filter.  Two point average filter Two zero fixed lowpass filter One pole filter.  do {n <- white_noise_m " ;f <- one_pole (n * 0.5) 0.95  ;audition [] (out1 f)} One zero filter.  do {n <- white_noise_m ! ;f <- one_zero (n * 0.5) 0.5  ;audition [] (out1 f)} Second order filter section. /A two pole resonant filter with zeroes at z = +/- 1. Based on  K. Steiglitz, "*A Note on Constant-Gain Digital Resonators",  Computer Music Journal(, vol 18, no. 4, pp. 8-10, Winter 1994. E The reciprocal of Q is used rather than Q because it saves a divide & operation inside the unit generator.  Inputs are: i = input signal, f = resonant frequency (in  hertz), rq+ = bandwidth ratio (reciprocal of Q);where rq =  bandwidth / centerFreq.   do {n <- white_noise_m % ;r <- resonz (n * 0.5) 440.0 0.1  ;audition [] (out1 r)} Modulate frequency  do {n <- white_noise_m < ;f <- fmap (\x -> x * 3500.0 + 4500.0) (lf_saw 0.1 0.0) " ;r <- resonz (n * 0.5) f 0.05  ;audition [] (out1 r)} &Resonant low pass filter. Inputs are: i = input signal, f =  frequency (hertz), rq = reciprocal of Q (resonance).  do {n <- white_noise_m : ;f <- fmap (\x -> x * 40.0 + 220.0) (sin_osc 0.5 0.0)  ;r <- rlpf n f 0.1  ;audition [] (out1 r)} BSample and hold. Holds input signal value when triggered. Inputs  are: i = input signal, t = trigger.  do {n <- white_noise_m  ;i <- impulse_m 9.0 0.0  ;l <- latch_m n (trigger i) * ;o <- sin_osc (l * 400.0 + 500.0) 0.0 # ;audition [] (out1 (o * 0.2))} Exponential decay. Inputs are: i = input signal, t = decay ? time. This is essentially the same as Integrator except that E instead of supplying the coefficient directly, it is caculated from E a 60 dB decay time. This is the time required for the integrator to C lose 99.9 % of its value or -60dB. This is useful for exponential + decaying envelopes triggered by impulses. Used as an envelope.  do {n <- brown_noise_m  ;f <- lf_saw 0.1 0.0 6 ;i <- impulse (lin_lin f (-1.0) 1.0 2.0 5.0) 0.25  ;e <- decay i 0.2 ! ;audition [] (out1 (e * n))} !Exponential decay (equivalent to decay dcy - decay atk). Single sample delay. Two sample delay. &Simple averaging filter. Inputs are: i = input signal, t =  lag time.  do {s <- sin_osc 0.05 0.0 . ;let f = lin_lin s (-1.0) 1.0 220.0 440.0  in do {o <- sin_osc f 0.0  ;f' <- lag f 1.0 ! ;o' <- sin_osc f' 0.0 6 ;audition [] (out2 (o * 0.2) (o' * 0.2))}} Nested lag filter. Twice nested lag filter. '     '     '     '     None of .  of .  of  of .  of .   of . ! of  of .  ! ! ! !None]^_`abcdefghijklmnopqrstuvwxyz{|}~      !c !""##$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}}~eghjlmst      !e"#$%&'()* + + , - - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F  G H I J K L M N O P e g h Q R S T U V W X + Y Z [ \ ] ^ _  ` a 5 b = c 4 d e f g h i j k > ? @ A l m n o p  q r s D E F t u v  G H I w x y J K z { L M N O | e g h}~Q      !"#$%&'&(&)&*+,-./01234 5 6 7 8 9:;&<=>?@ 7 8 9 ABhdf-0.14Sound.DF.Uniform.LL.UIdSound.DF.Uniform.LL.KSound.DF.Uniform.LL.DotSound.DF.Uniform.LL.CommandSound.DF.Uniform.LL.CGenSound.DF.Uniform.LL.AuditionSound.DF.Uniform.UDFSound.DF.Uniform.FaustSound.DF.Uniform.PhT.NodeSound.DF.Uniform.PhT.AuditionSound.DF.Uniform.PhT.DrawSound.DF.Uniform.GADT.DFSound.DF.Uniform.GADT.AuditionSound.DF.Uniform.GADT.UGen"Sound.DF.Uniform.GADT.UGen.MonadicSound.DF.Uniform.GADT.DrawSound.DF.Uniform.LLSound.DF.Uniform.PhTSound.DF.Uniform.GADTUId generateIdIdevalIdK_NumK_OrdK'to_kKVFIBNVecV_Idvec_id vec_concisek_typeOf k_concisenil_tbool_tint32_tfloat_t vec_float_t ty_colour w_bracketdot_attrdot_rec dot_rec_ardot_rec'g_loadg_unloadHostTextSC3JACK InstructionsVarVar_TyBuf_VarStd_VarRec_VarC_CallC_QNameC_Type C_Comment c_commentc_typerep_ctype c_init_atom c_init_vec c_init_var c_array_qualc_call var_ty_charvar_nm is_statefulis_stateful_atomk_var buffer_varvar_initvar_declgen_var_structclabel std_clabelm_clabelc_const dsp_fun_declcmemcstate dsp_memreqdsp_initdsp_stepcode_gen host_includehost_dsp_fun_declhost_compiler_cmddl_genbracketdx_d with_jack_dlaudition u_cmd_g_load audition_sc3 audition_textGr'GrAnalysisGraphEdgeEdge_Ty Implicit_Edge Rec_Rd_Edge Rec_Wr_Edge Normal_EdgeNode Port_IndexUDFUDF_MUDF_PUDF_RUDF_Audf_aUDF_Kudf_kR_Id udf_conciseudf_k'udf_elem udf_typeOf udf_traverseedge_ty_concisenode_idnode_udflabelsource udf_edge_tyedges match_rec implicit_edge is_k_nodeis_orphan_edge vgraph_implfind_in_edge_m find_in_edgesolve_rec_edgeimplicit_edge' is_rec_node vgraph_directanalysegraphudf_grudf_gr'tsort node_vars node_c_callk_nodesudf_instructions udf_dl_gendot_ardot_nodeedge_ty_colourdot_edge dot_graphdot_drawdrawdraw'gr_dotgr_dot'gr_drawgr_draw'N_Prim n_prim_id n_prim_namen_prim_in_degree n_prim_ty N_Constant n_constant_id n_constant_kWireWire_TyImplicit_Backward Implicit_RecImplicit_NormalBackwardNormalPort Output_Port Input_Portport_bd port_indexDegreeBDRecSplitSeqParPrimConstantRec_Idbd_id bd_req_idbd_pp bd_signaturebd_ty bd_ty_uniformbd_ty1~~~.~:~<:~:>bd_foldl bd_traverserec_ids bd_set_iddegree in_degree out_degreeportsport_ty normal_wiresrec_back_wires wires_immedwires wire_coheresbd_non_coherentbd_is_coherent actual_idnode_ty node_lift_idnode_ppedge_is_implicit_backward rec_nodesnodes wire_to_edgeswires_to_edgesgraph'gr wire_colourdraw_dotpar_lbd_sumsplit_rsplit_msplit merge_degreemerge_mmergerec_rrec_mrec i_constant r_constantu_primi_primr_primi_addr_addi_subr_subi_mulr_muli_divr_divi_absr_absi_negater_negate i_identity r_identityfloat_to_int32int32_to_floati32_to_normal_f32out1ty_uopty_binopty_addty_subty_multy_divty_add1ty_mul1ty_div1cg_k cg_node_var node_output node_inputscg_node_c_callbd_instructionsfig_3_2fig_3_3fig_3_4fig_3_5fig_3_6fig_3_6' i_counteradjacentbimapDFdf_udfKTkt_kk_Int32k_Floatk_zerodf_Int32df_Float df_tbl_sizemrgdf_typemk_aunary_operatorbinary_operatorcomparison_operator sink_nodealt_unary_operatordf_vec_mdf_eqdf_ltdf_gtedf_gtn_lte df_ceilingf df_floorf df_lrintf df_roundfout2out3ctl1select2 w_sample_rateb_readb_writea_reada_writerecmdrawM Binary_Fn Senary_Op Quinary_Op Quaternary_Op Ternary_Op Binary_OpUnary_OpMP3P2P1P0RA df_typeOf df_primitivedf_vec df_vec_sizemk_uopmk_binop mk_ternaryop df_mul_adddf_add_optimise df_bw_anddf_bw_or df_bw_notdf_ltedf_maxdf_mindf_float_to_int32df_int32_to_floatdf_moddf_fmodfdf_ceilfrec_hrec_mMin1df_anddf_ordf_not w_kr_nframes w_kr_edgedf_eraseT5swaptwo_pimidi_cpsmul_addcalc_fblin_linlin_expclip2 hz_to_incr incr_to_hzlin_pan2 k_sample_ratew_radians_per_sample tbl_guardtbl_sincliprdf_clip2iir1phasor a_alloc_sec a_delay_pha_delay a_tbl_sina_lerp tbl_phasora_osc unit_delayiir2fir1fir2biquadcounter buf_delay buf_comb_ncomb_nlcg_i32 lcg_glibcrandirandf white_noise brown_noise_f brown_noisesin_oscimpulself_sawlf_pulsebpz2brz2lpz1lpz2 one_pole_fone_pole one_zero_fone_zerosos_fsosresonz_fresonzrlpf_frlpfhpf_chpfpositive non_positive trigger_ftrigger count_true pulse_dividerpulse_divider'latchdecay_fdecaydecay2delay1delay2lag_flaglag2lag3iir1_mphasor_m a_alloc_sec_m a_delay_m a_tbl_sin_m tbl_phasor_ma_osc_m unit_delay_miir2_mfir1_mfir2_mbiquad_m counter_m buf_delay_m buf_comb_n_mcomb_n_m white_noise_m brown_noise_m sin_osc_m impulse_mlf_saw_m lf_pulse_mbpz2_mbrz2_mlpz1_mlpz2_m one_pole_m one_zero_msos_mresonz_mrlpf_mlatch_mdecay_mdecay2_mdelay1_mdelay2_mlag_mlag2_mlag3_mgr_drawM $fUIdStateT$fUIdIObaseGHC.NumNumghc-prim GHC.ClassesOrdGHC.ShowShowData.Typeable.InternalTypeabletypeOf GHC.TypesBoolGHC.IntInt32Float $fK_NumFloat $fK_NumInt32 $fK_OrdFloat $fK_OrdInt32 $fK_OrdBool$fK'Vec $fK'Float $fK'Int32$fK'Bool$fK'()$fShowK $fTypeableKTypeRepGHC.BaseString Data.List mapAccumL Data.EitherRightGHC.Errerror $fShowEdge_TyGHC.Listfoldl Data.Tuplefstsnd concatMap+-*GHC.RealdivIntegral/ Fractionalabsnegate $fShowNode$fFractionalBD$fNumBD==<>=><=$fOrdDF$fBitsDF $fFloatingDF$fFractionalDF$fNumDFmaxminmod&&||notTrue $fTypeableDF