type index = int;; type time = int;; type basic = N of int | R of float | Vec of vector | Zero | Error and vector = < size : int; nth : (index -> basic) >;; class type vector_type = object method size : int method nth : index -> basic end;; class type value_type = object method get : basic method to_int : int method to_float : float method to_float_array : float array method to_string : string method normalize : unit method add : value_type -> value_type method neg : value_type method sub : value_type -> value_type method mul : value_type -> value_type method recip : value_type method div : value_type -> value_type method zero : value_type method floor : value_type method int : value_type method sin : value_type method cos : value_type method atan : value_type method sqrt : value_type method atan2 : value_type -> value_type method _mod : value_type -> value_type method larger : value_type -> value_type method smaller : value_type -> value_type end;; type symbol = Add | Sub | Mul | Div | Pass | Stop | Mem | Delay | Floor | Int | Sin | Cos | Atan | Atan2 | Sqrt | Rdtable | Mod | Vectorize | Vconcat | Vpick | Serialize | Larger | Smaller | Prefix | Select2 | Select3 type faust_exp = Const of basic | Ident of symbol | Par of faust_exp * faust_exp | Seq of faust_exp * faust_exp | Rec of faust_exp * faust_exp | Split of faust_exp * faust_exp | Merge of faust_exp * faust_exp class type signal_type = object method frequency : int method at : time -> value_type method add_memory : int -> unit method add : signal_type -> signal_type method neg : signal_type method sub : signal_type -> signal_type method mul : signal_type -> signal_type method div : signal_type -> signal_type method delay : signal_type -> signal_type method mem : signal_type method vectorize : signal_type -> signal_type method serialize : signal_type method vconcat : signal_type -> signal_type method vpick : signal_type -> signal_type method floor : signal_type method int : signal_type method sin : signal_type method cos : signal_type method atan : signal_type method atan2 : signal_type -> signal_type method sqrt : signal_type method _mod : signal_type -> signal_type method larger : signal_type -> signal_type method smaller : signal_type -> signal_type method rdtable : signal_type -> signal_type -> signal_type method select2 : signal_type -> signal_type -> signal_type method select3 : signal_type -> signal_type -> signal_type -> signal_type method prefix : signal_type -> signal_type end;; class type beam_type = object method get : signal_type array method width : int method sub : int -> int -> beam_type method cut : int -> beam_type * beam_type method append : beam_type -> beam_type method matching : int -> beam_type method at : time -> value_type array method output : int -> value_type array array method frequency : int array end;; class type dimension_type = object method input : int method output : int method par : dimension_type -> dimension_type method seq : dimension_type -> dimension_type method split : dimension_type -> dimension_type method merge : dimension_type -> dimension_type method _rec : dimension_type -> dimension_type end;; class type process_type = object method exp : faust_exp method dim : dimension_type method delay : int method eval : beam_type -> beam_type end;; class type io_type = object method read : string array -> beam_type method write : value_type array array -> string array end;;