sig
  type lident = Longident.t
  type uident = Longident.t
  type iident = Longident.t
  type ident = Longident.t
  type iname = string
  type tname = string
  type filename = string
  type exp =
      Constant of Code.ident
    | Var of Code.lident
    | Match of Code.exp * Code.clauses
    | Try of Code.exp * Code.clauses
    | Generator of Code.uident * Code.exp
    | Apply of Code.exp * Code.exp list
    | Infix of Code.exp * Code.iident * Code.exp
    | If of Code.exp * Code.exp * Code.exp
    | Let of Code.lident * Code.pattern list * Code.exp * Code.exp
    | Letrec of Code.lident * Code.pattern list * Code.exp * Code.exp
    | Sequence of Code.exp * Code.exp * Code.exp list
    | Record of (Code.lident * Code.exp) list
    | Tuple of Code.exp list
    | List of Code.exp list
    | Ocaml_pattern of Parsetree.pattern
    | Ocaml_expression of Parsetree.expression
    | Function of Code.clauses
    | Sline_directive of int * Code.filename * Code.exp
    | Comment of string * Code.exp
  and pattern = Code.exp
  and clause =
      Clause of Code.pattern * Code.exp
    | Clause_when of Code.pattern * Code.exp * Code.exp
  and clauses = Code.clause list
  type structure_item =
      Pstr_eval of Code.exp
    | Pstr_value of Asttypes.rec_flag *
        (Code.lident * Code.exp list * Code.exp) list
    | Pstr_primitive of string * Parsetree.value_description
    | Pstr_type of (string * Parsetree.type_declaration) list
    | Pstr_exception of string * Parsetree.exception_declaration
    | Pstr_open of Longident.t
    | Pstr_include of Parsetree.module_expr
    | Pstr_comment of string * Code.structure_item
  type structure = Code.structure_item list
  val underscored_ocaml_pattern : Parsetree.pattern -> Parsetree.pattern
  val underscored_pattern : Code.exp -> Code.exp
  val underscored_clause : Code.clause -> Code.clause
  val prefix_longident : string -> Longident.t -> Longident.t
  val topletrec :
    (Code.lident * Code.pattern list * Code.exp) list -> Code.structure_item
  val underscore : Code.pattern
  val x : Code.exp
  val y : Code.exp
  val z : Code.exp
  val t : Code.exp
  val u : Code.exp
  val xs : Code.exp
  val genr_args : string -> int -> Code.pattern list
  val genr_numbered_args : string -> int -> (int * Code.exp) list
  val genr_underscores : int -> Code.pattern list
  val make_Constant : string -> Code.exp
  val make_Var : string -> Code.exp
  val apply : Code.lident -> Code.exp list -> Code.exp
  val apply1 : Code.lident -> Code.exp -> Code.exp
  val apply2 : Code.lident -> Code.exp -> Code.exp -> Code.exp
  val apply3 : Code.lident -> Code.exp -> Code.exp -> Code.exp -> Code.exp
  val infix_apply : Code.exp -> Code.iident -> Code.exp -> Code.exp
  val infix_name : Code.exp -> Code.iname -> Code.exp -> Code.exp
  val let0 : Code.lident -> Code.exp -> Code.exp -> Code.exp
  val let1 : Code.lident -> Code.pattern -> Code.exp -> Code.exp -> Code.exp
  val pair : Code.exp -> Code.exp -> Code.exp
  val raise_error : string -> Code.exp
  val division_by_absorbent : Code.exp
  val failure_division_by_absorbent : Code.exp
  val failwith_division_by_absorbent : Code.exp
  val sequence : Code.exp -> Code.exp -> Code.exp
end