Module Declaremods

Modules
type 'a module_signature =
| Enforce of 'a

... : T

| Check of 'a list

... <: T1 <: T2, possibly empty

type inline =
| NoInline
| DefaultInline
| InlineAt of int
type module_params = (Names.lident list * (Constrexpr.module_ast * inline)) list
type module_expr = Modintern.module_struct_expr * Names.ModPath.t * Modintern.module_kind * Entries.inline
type module_params_expr = (Names.MBId.t list * module_expr) list
Libraries i.e. modules on disk
type library_name = Names.DirPath.t
type library_objects
module Synterp : sig ... end
module Interp : sig ... end
val start_library : library_name -> unit
val end_library : output_native_objects:bool -> library_name -> Safe_typing.compiled_library * library_objects * library_objects * Nativelib.native_library * Library_info.t list
val append_end_library_hook : (unit -> unit) -> unit

append a function to be executed at end_library

...
val iter_all_interp_segments : (Nametab.object_prefix -> Libobject.t -> unit) -> unit
val debug_print_modtab : unit -> Pp.t
val process_module_binding : Names.MBId.t -> (Constr.t * UVars.AbstractContext.t option) Declarations.module_alg_expr -> unit
val import_module : Libobject.open_filter -> export:Lib.export_flag -> Names.ModPath.t -> unit
val declare_module : Names.Id.t -> module_params -> (Constrexpr.module_ast * inline) module_signature -> (Constrexpr.module_ast * inline) list -> Names.ModPath.t
val start_module : Lib.export -> Names.Id.t -> module_params -> (Constrexpr.module_ast * inline) module_signature -> Names.ModPath.t
val end_module : unit -> Names.ModPath.t
val declare_modtype : Names.Id.t -> module_params -> (Constrexpr.module_ast * inline) list -> (Constrexpr.module_ast * inline) list -> Names.ModPath.t
val start_modtype : Names.Id.t -> module_params -> (Constrexpr.module_ast * inline) list -> Names.ModPath.t
val end_modtype : unit -> Names.ModPath.t
val declare_include : (Constrexpr.module_ast * inline) list -> unit