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 of_float_array : float array -> value_type 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 power : value_type -> value_type method _and : value_type -> value_type method _or : value_type -> value_type method _xor : value_type -> value_type method zero : value_type method floor : value_type method ceil : value_type method rint : value_type method int : value_type method float : value_type method sin : value_type method asin : value_type method cos : value_type method acos : value_type method tan : value_type method atan : value_type method atan2 : value_type -> value_type method exp : value_type method sqrt : value_type method ln : value_type method lg : value_type method abs : value_type method fmod : value_type -> value_type method _mod : value_type -> value_type method remainder : value_type -> value_type method gt : value_type -> value_type method lt : value_type -> value_type method geq : value_type -> value_type method leq : value_type -> value_type method eq : value_type -> value_type method neq : value_type -> value_type method shl : value_type -> value_type method shr : value_type -> value_type method max : value_type -> value_type method min : value_type -> value_type end;; type symbol = Add | Sub | Mul | Div | Power | Pass | Stop | And | Or | Xor | Mem | Delay | Floor | Ceil | Rint | Int | Float | Sin | Asin | Cos | Acos | Tan | Atan | Atan2 | Exp | Sqrt | Ln | Lg | Abs | Fmod | Mod | Remainder | Vectorize | Vconcat | Vpick | Serialize | Gt | Lt | Geq | Leq | Eq | Neq | Shl | Shr | Max | Min | Prefix | Select2 | Select3 | Rdtable | Rwtable | Button | Checkbox | Vslider | Hslider | Vgroup | Hgroup | Tgroup | Hbargraph | Vbargraph | Nentry | Attach 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 rate_type = object method to_int : int method to_float : float method to_string : string method num : int method denom : int method equal : rate_type -> bool method mul : int -> rate_type method div : int -> rate_type end class type signal_type = object method frequency : rate_type 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 power : signal_type -> signal_type method _and : signal_type -> signal_type method _or : signal_type -> signal_type method _xor : 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 ceil : signal_type method rint : signal_type method int : signal_type method float : signal_type method sin : signal_type method asin : signal_type method cos : signal_type method acos : signal_type method tan : signal_type method atan : signal_type method atan2 : signal_type -> signal_type method exp : signal_type method sqrt : signal_type method ln : signal_type method lg : signal_type method abs : signal_type method fmod : signal_type -> signal_type method _mod : signal_type -> signal_type method remainder : signal_type -> signal_type method gt : signal_type -> signal_type method lt : signal_type -> signal_type method geq : signal_type -> signal_type method leq : signal_type -> signal_type method eq : signal_type -> signal_type method neq : signal_type -> signal_type method shl : signal_type -> signal_type method shr : signal_type -> signal_type method max : signal_type -> signal_type method min : signal_type -> signal_type method rdtable : signal_type -> signal_type -> signal_type method rwtable : signal_type -> signal_type -> 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;; type matrix = float array array;; type data = float array array array;; 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 -> data method frequency : rate_type 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 set : string -> string -> string -> unit method read : string array -> beam_type method write : rate_type array -> data -> string array end;;