`type var = Js_of_ocaml_compiler.Code.Var.t`
`type packed_type =`

1. `| I8`
2. `| I16`

`type heap_type =`

1. `| Func`
2. `| Extern`
3. `| Any`
4. `| Eq`
5. `| Struct`
6. `| Array`
7. `| I31`
8. `| None_`
9. `| Type of var`

`type ref_type = {`

1. `nullable : bool;`
2. `typ : heap_type;`

`}`
`type value_type =`

1. `| I32`
2. `| I64`
3. `| F32`
4. `| F64`
5. `| Ref of ref_type`

`type storage_type =`

1. `| Value of value_type`
2. `| Packed of packed_type`

`type 'typ mut_type = {`

1. `mut : bool;`
2. `typ : 'typ;`

`}`
`type field_type = storage_type mut_type`
`type global_type = value_type mut_type`
`type func_type = {`

1. `params : value_type list;`
2. `result : value_type list;`

`}`
`type str_type =`

1. `| Struct of field_type list`
2. `| Array of field_type`
3. `| Func of func_type`

`type ('i32, 'i64, 'f32, 'f64) op =`

1. `| I32 of 'i32`
2. `| I64 of 'i64`
3. `| F32 of 'f32`
4. `| F64 of 'f64`

`type signage =`

1. `| S`
2. `| U`

`type int_un_op =`

1. `| Clz`
2. `| Ctz`
3. `| Popcnt`
4. `| Eqz`
5. `| TruncSat of [ `F32 | `F64 ] * signage`
6. `| ReinterpretF`

`type int_bin_op =`

1. `| Add`
2. `| Sub`
3. `| Mul`
4. `| Div of signage`
5. `| Rem of signage`
6. `| And`
7. `| Or`
8. `| Xor`
9. `| Shl`
10. `| Shr of signage`
11. `| Rotl`
12. `| Rotr`
13. `| Eq`
14. `| Ne`
15. `| Lt of signage`
16. `| Gt of signage`
17. `| Le of signage`
18. `| Ge of signage`

`type float_un_op =`

1. `| Neg`
2. `| Abs`
3. `| Ceil`
4. `| Floor`
5. `| Trunc`
6. `| Nearest`
7. `| Sqrt`
8. `| Convert of [ `I32 | `I64 ] * signage`
9. `| ReinterpretI`

`type float_bin_op =`

1. `| Add`
2. `| Sub`
3. `| Mul`
4. `| Div`
5. `| Min`
6. `| Max`
7. `| CopySign`
8. `| Eq`
9. `| Ne`
10. `| Lt`
11. `| Gt`
12. `| Le`
13. `| Ge`

`type memarg = int32`
`type expression =`

1. `| Const of (int32, int64, float, float) op`
2. `| UnOp of (int_un_op, int_un_op, float_un_op, float_un_op) op * expression`
3. `| BinOp of (int_bin_op, int_bin_op, float_bin_op, float_bin_op) op * expression * expression`
4. `| I32WrapI64 of expression`
5. `| I64ExtendI32 of signage * expression`
6. `| F32DemoteF64 of expression`
7. `| F64PromoteF32 of expression`
8. `| LocalGet of var`
9. `| LocalTee of var * expression`
10. `| GlobalGet of var`
11. `| BlockExpr of func_type * instruction list`
12. `| Call of var * expression list`
13. `| Seq of instruction list * expression`
14. `| Pop of value_type`
15. `| RefFunc of var`
16. `| Call_ref of var * expression * expression list`
17. `| RefI31 of expression`
18. `| I31Get of signage * expression`
19. `| ArrayNew of var * expression * expression`
20. `| ArrayNewFixed of var * expression list`
21. `| ArrayNewData of var * var * expression * expression`
22. `| ArrayGet of signage option * var * expression * expression`
23. `| ArrayLen of expression`
24. `| StructNew of var * expression list`
25. `| StructGet of signage option * var * int * expression`
26. `| RefCast of ref_type * expression`
27. `| RefTest of ref_type * expression`
28. `| RefEq of expression * expression`
29. `| RefNull of heap_type`
30. `| Br_on_cast of int * ref_type * ref_type * expression`
31. `| Br_on_cast_fail of int * ref_type * ref_type * expression`
32. `| Br_on_null of int * expression`
33. `| IfExpr of value_type * expression * expression * expression`
34. `| Try of func_type * instruction list * (var * int * value_type) list`
35. `| ExternConvertAny of expression`
36. `| AnyConvertExtern of expression`

`and instruction =`

1. `| Drop of expression`
2. `| LocalSet of var * expression`
3. `| GlobalSet of var * expression`
4. `| Loop of func_type * instruction list`
5. `| Block of func_type * instruction list`
6. `| If of func_type * expression * instruction list * instruction list`
7. `| Br_table of expression * int list * int`
8. `| Br of int * expression option`
9. `| Br_if of int * expression`
10. `| Return of expression option`
11. `| CallInstr of var * expression list`
12. `| Nop`
13. `| Push of expression`
14. `| Throw of var * expression`
15. `| Rethrow of int`
16. `| ArraySet of var * expression * expression * expression`
17. `| StructSet of var * int * expression * expression`
18. `| Return_call of var * expression list`
19. `| Return_call_ref of var * expression * expression list`
20. `| Unreachable`
21. `| Event of Js_of_ocaml_compiler.Parse_info.t`
    (*

    Location information

    *)

`type import_desc =`

1. `| Fun of func_type`
2. `| Global of global_type`
3. `| Tag of value_type`

`type type_field = {`

1. `name : var;`
2. `typ : str_type;`
3. `supertype : var option;`
4. `final : bool;`

`}`
`type module_field =`

1. `| Function of {`
   1. `name : var;`
   2. `exported_name : string option;`
   3. `typ : var option;`
   4. `signature : func_type;`
   5. `param_names : var list;`
   6. `locals : (var * value_type) list;`
   7. `body : instruction list;`
   `}`
2. `| Data of {`
   1. `name : var;`
   2. `contents : string;`
   `}`
3. `| Global of {`
   1. `name : var;`
   2. `exported_name : string option;`
   3. `typ : global_type;`
   4. `init : expression;`
   `}`
4. `| Tag of {`
   1. `name : var;`
   2. `typ : value_type;`
   `}`
5. `| Import of {`
   1. `import_module : string;`
   2. `import_name : string;`
   3. `name : var;`
   4. `desc : import_desc;`
   `}`
6. `| Type of type_field list`