sig
  type generated_function =
      Construction of Parsetree.generator * Code.pattern list * Code.exp
    | Comparison of Code.lident * Code.pattern list * Code.exp
    | Construction_helper of Code.lident * Code.pattern list * Code.exp
    | Construction_record of Code.lident * Code.pattern list * Code.exp
  type generated_functions = Genr_base.generated_function list
  val is_construction_function : Genr_base.generated_function -> bool
  type binary_fun_exp = Code.exp -> Code.exp -> Code.exp
  type comparisons =
      Genr_base.binary_fun_exp * Genr_base.binary_fun_exp *
      Genr_base.binary_fun_exp
  val comparison_function : Longident.t option -> Code.exp
  val genr_comparisons : Code.lident option -> Genr_base.comparisons
  val pervasives_comparisons : Genr_base.comparisons
  val eq_function :
    Genr_base.binary_fun_exp -> Code.exp -> Code.exp -> Code.exp
  val get_user_rel_order : unit -> bool
  val set_user_rel_order : unit -> unit
  val order_rels :
    (Parsetree.relation -> int) ->
    Parsetree.relation list -> Parsetree.relation list
  val order_relations :
    (Parsetree.relation -> int) -> Parsetree.relations -> Parsetree.relations
  val set_sharable_target : unit -> unit
  val get_sharable_target : unit -> bool
  val compare_function : Parsetree.generator -> Code.lident
  val construction_function_name : string -> string
  val construction_function_ident : Code.uident -> Code.lident
  val construction_function : Parsetree.generator -> Code.lident
  val construction_function_memo_table_ident :
    Parsetree.generator -> Code.lident
  val prefix_ident : string -> Code.lident -> Code.lident
  val prefix_construction_function :
    string -> Parsetree.generator -> Code.lident
  val prefix_construction_function2 :
    string -> Parsetree.generator -> Parsetree.generator -> Code.lident
  val mk_sharing_function_ident : Parsetree.generator -> Code.lident
  val construction : Parsetree.generator -> Code.exp list -> Code.exp
  val construction0 : Parsetree.generator -> Code.exp
  val construction1 : Parsetree.generator -> Code.exp -> Code.exp
  val construction2 : Parsetree.generator -> Code.exp -> Code.exp -> Code.exp
  val generator : Parsetree.generator -> Code.exp list -> Code.exp
  val generator0 : Parsetree.generator -> Code.exp
  val generator1 : Parsetree.generator -> Code.exp -> Code.exp
  val generator2 : Parsetree.generator -> Code.exp -> Code.exp -> Code.exp
  val nil : Code.exp
  val singleton : Code.exp -> Code.exp
  val cons : Code.exp -> Code.exp -> Code.exp
  val append : Code.exp -> Code.exp -> Code.exp
  val genr_rule_pattern : Parsetree.pattern -> Parsetree.pattern
  val pattern_info :
    Parsetree.generator -> Code.pattern -> Code.pattern list -> Code.pattern
  val pattern : Parsetree.generator -> Code.pattern list -> Code.pattern
  val pattern0 : Parsetree.generator -> Code.pattern
  val pattern1 : Parsetree.generator -> Code.pattern -> Code.pattern
  val pattern2 :
    Parsetree.generator -> Code.pattern -> Code.pattern -> Code.pattern
  val genr_eq : string * Parsetree.type_declaration -> Code.structure_item
  val genr_projection :
    string * Parsetree.type_declaration ->
    Parsetree.core_type -> Code.structure_item
  val clauses_of_side :
    Parsetree.relation_side ->
    Code.clause -> Code.clause -> Code.clauses -> Code.clauses
  val clauses_left_or_right :
    Parsetree.relation_side ->
    Code.clause -> Code.clause -> Code.clauses -> Code.clauses
  val clauses_both_as_left :
    Parsetree.relation_side ->
    Code.clause -> Code.clause -> Code.clauses -> Code.clauses
  val opt : bool -> Code.clause -> Code.clauses -> Code.clauses
  val lazy_opt :
    bool -> (unit -> Code.clause) -> Code.clauses -> Code.clauses
  val opts : bool -> Code.clauses -> Code.clauses -> Code.clauses
  val map_of_direction :
    Parsetree.distributivity_direction -> ('-> 'b) -> 'a list -> 'b list
  val imap_of_direction : Parsetree.distributivity_direction -> Longident.t
  val diese_line : Location.t -> int * string
  val set_dline_trace : unit -> unit
  val get_dline_trace : unit -> bool
  val set_comments : unit -> unit
  val get_comments : unit -> bool
  val trace_clause : int -> string -> Code.clause -> Code.clause
end