sig
  type locality = Local | Global of string
  type generator_arity =
      Ga_zeroary
    | Ga_unary
    | Ga_binary
    | Ga_listary
    | Ga_mary of int
  type generator_info = {
    gi_type_name : string;
    gi_type_params : string list;
    gi_target_type : Parsetree.core_type;
    gi_generator_name : string;
    gi_locality : Check.locality;
    gi_arity : Check.generator_arity;
    gi_arg_types : Parsetree.core_type list;
    gi_relations : Parsetree.relations;
    gi_location : Location.t;
    gi_priv_flag : Asttypes.private_flag;
  }
  type msg = string
  type error =
      Unknown_generator of Longident.t
    | No_neutral_element of Longident.t
    | Public_type_with_relations of string
    | Cannot_find_module of Longident.t
    | Not_supported of string
    | Relation_already_declared of Location.t
    | Incompatible_types of Longident.t * Longident.t
    | Invalid_pattern
    | Pattern_not_headed_by_correct_generator of Longident.t
    | Illegal_relation of Longident.t
    | Incompatible_relations of Longident.t * Parsetree.relation *
        Parsetree.relation
    | Unsound_ordering of Check.msg
  exception Error of Location.t * Check.error
  val raise_error : Location.t -> Check.error -> 'a
  val report_error : Format.formatter -> Check.error -> unit
  val is_local_info : Check.generator_info -> bool
  val is_private_info : Check.generator_info -> bool
  val is_listary_info : Check.generator_info -> bool
  val arity_of_info : Check.generator_info -> int
  val add_type_decls :
    Check.locality -> (string * Parsetree.type_declaration) list -> unit
  val is_generator_ident : Longident.t -> bool
  val find_generator_ident_info : Longident.t -> Check.generator_info
  val find_generator_name_info : string -> Check.generator_info
  val is_type_ident : Longident.t -> bool
  val find_type_ident_declaration : Longident.t -> Parsetree.type_declaration
  val find_type_name_declaration : string -> Parsetree.type_declaration
  val find_generator_info : Parsetree.generator -> Check.generator_info
  val is_listary_generator : Parsetree.generator -> bool
  val is_local_generator : Parsetree.generator -> bool
  val is_private_generator : Parsetree.generator -> bool
  val arity_of_generator : Parsetree.generator -> int
  val get_arity_of_generator : Parsetree.generator -> Check.generator_arity
  val is_truly_unary_generator : Parsetree.generator -> bool
  val neutral_element_of_generator :
    Parsetree.generator -> Parsetree.generator
end