sig
  type signature_simplification_info
  val type_module : Env.t -> Parsetree.module_expr -> Typedtree.module_expr
  val type_structure :
    Env.t ->
    Parsetree.structure ->
    Location.t ->
    Typedtree.structure * Types.signature *
    Typemod.signature_simplification_info * Env.t
  val type_toplevel_phrase :
    Env.t ->
    Parsetree.structure ->
    Typedtree.structure * Types.signature *
    Typemod.signature_simplification_info * Env.t
  val type_implementation :
    string ->
    string ->
    string ->
    Env.t ->
    Parsetree.structure -> Typedtree.structure * Typedtree.module_coercion
  val type_interface :
    string -> Env.t -> Parsetree.signature -> Typedtree.signature
  val transl_signature : Env.t -> Parsetree.signature -> Typedtree.signature
  val check_nongen_schemes : Env.t -> Types.signature -> unit
  val type_open_ :
    ?used_slot:bool Stdlib.ref ->
    ?toplevel:bool ->
    Asttypes.override_flag ->
    Env.t -> Location.t -> Longident.t Asttypes.loc -> Path.t * Env.t
  val modtype_of_package :
    Env.t ->
    Location.t ->
    Path.t -> Longident.t list -> Types.type_expr list -> Types.module_type
  val simplify_signature :
    Env.t ->
    Typemod.signature_simplification_info ->
    Types.signature -> Types.signature
  val path_of_module : Typedtree.module_expr -> Path.t option
  val save_signature :
    string ->
    Typedtree.signature ->
    string -> string -> Env.t -> Cmi_format.cmi_infos -> unit
  val package_units :
    Env.t -> string list -> string -> string -> Typedtree.module_coercion
  val initial_env :
    loc:Location.t ->
    safe_string:bool ->
    initially_opened_module:string option ->
    open_implicit_modules:string list -> Env.t
  module Sig_component_kind :
    sig
      type t =
          Value
        | Type
        | Module
        | Module_type
        | Extension_constructor
        | Class
        | Class_type
      val to_string : Typemod.Sig_component_kind.t -> string
    end
  type hidding_error = {
    shadowed_item_id : Ident.t;
    shadowed_item_kind : Typemod.Sig_component_kind.t;
    shadowed_item_loc : Location.t;
    shadower_id : Ident.t;
    user_id : Ident.t;
    user_kind : Typemod.Sig_component_kind.t;
    user_loc : Location.t;
  }
  type error =
      Cannot_apply of Types.module_type
    | Not_included of Includemod.error list
    | Cannot_eliminate_dependency of Types.module_type
    | Signature_expected
    | Structure_expected of Types.module_type
    | With_no_component of Longident.t
    | With_mismatch of Longident.t * Includemod.error list
    | With_makes_applicative_functor_ill_typed of Longident.t * Path.t *
        Includemod.error list
    | With_changes_module_alias of Longident.t * Ident.t * Path.t
    | With_cannot_remove_constrained_type
    | Repeated_name of Typemod.Sig_component_kind.t * string
    | Non_generalizable of Types.type_expr
    | Non_generalizable_class of Ident.t * Types.class_declaration
    | Non_generalizable_module of Types.module_type
    | Implementation_is_required of string
    | Interface_not_compiled of string
    | Not_allowed_in_functor_body
    | Not_a_packed_module of Types.type_expr
    | Incomplete_packed_module of Types.type_expr
    | Scoping_pack of Longident.t * Types.type_expr
    | Recursive_module_require_explicit_type
    | Apply_generative
    | Cannot_scrape_alias of Path.t
    | Badly_formed_signature of string * Typedecl.error
    | Cannot_hide_id of Typemod.hidding_error
  exception Error of Location.t * Env.t * Typemod.error
  exception Error_forward of Location.error
  val report_error :
    Env.t -> Stdlib.Format.formatter -> Typemod.error -> unit
  module ImplementationHooks :
    sig
      type t = Typedtree.structure * Typedtree.module_coercion
      val add_hook : string -> (Misc.hook_info -> t -> t) -> unit
      val apply_hooks : Misc.hook_info -> t -> t
    end
  module InterfaceHooks :
    sig
      type t = Typedtree.signature
      val add_hook : string -> (Misc.hook_info -> t -> t) -> unit
      val apply_hooks : Misc.hook_info -> t -> t
    end
end