Module Libobject

type 'a substitutivity =
| Dispose
| Substitute of 'a
| Keep of 'a
| Anticipate of 'a
type object_name = Libnames.full_path * Names.KerName.t
type 'a object_declaration = {
object_name : string;
cache_function : (object_name * 'a) -> unit;
load_function : int -> (object_name * 'a) -> unit;
open_function : int -> (object_name * 'a) -> unit;
classify_function : 'a -> 'a substitutivity;
subst_function : (Mod_subst.substitution * 'a) -> 'a;
discharge_function : (object_name * 'a) -> 'a option;
rebuild_function : 'a -> 'a;
}
val default_object : string -> 'a object_declaration
val ident_subst_function : (Mod_subst.substitution * 'a) -> 'a

the identity substitution function

...
type obj
type algebraic_objects =
| Objs of objects
| Ref of Names.ModPath.t * Mod_subst.substitution
and t =
| ModuleObject of substitutive_objects
| ModuleTypeObject of substitutive_objects
| IncludeObject of algebraic_objects
| KeepObject of objects
| ExportObject of {
mpl : Names.ModPath.t list;
}
| AtomicObject of obj
and objects = (Names.Id.t * t) list
and substitutive_objects = Names.MBId.t list * algebraic_objects
val declare_object_full : 'a object_declaration -> ('a -> obj) * (obj -> 'a)
val declare_object : 'a object_declaration -> 'a -> obj
val object_tag : obj -> string
val cache_object : (object_name * obj) -> unit
val load_object : int -> (object_name * obj) -> unit
val open_object : int -> (object_name * obj) -> unit
val subst_object : (Mod_subst.substitution * obj) -> obj
val classify_object : obj -> obj substitutivity
val discharge_object : (object_name * obj) -> obj option
val rebuild_object : obj -> obj
val local_object : string -> cache:((object_name * 'a) -> unit) -> discharge:((object_name * 'a) -> 'a option) -> 'a object_declaration
val local_object_nodischarge : string -> cache:((object_name * 'a) -> unit) -> 'a object_declaration
val global_object : string -> cache:((object_name * 'a) -> unit) -> subst:((Mod_subst.substitution * 'a) -> 'a) option -> discharge:((object_name * 'a) -> 'a option) -> 'a object_declaration
val global_object_nodischarge : string -> cache:((object_name * 'a) -> unit) -> subst:((Mod_subst.substitution * 'a) -> 'a) option -> 'a object_declaration
val superglobal_object : string -> cache:((object_name * 'a) -> unit) -> subst:((Mod_subst.substitution * 'a) -> 'a) option -> discharge:((object_name * 'a) -> 'a option) -> 'a object_declaration
val superglobal_object_nodischarge : string -> cache:((object_name * 'a) -> unit) -> subst:((Mod_subst.substitution * 'a) -> 'a) option -> 'a object_declaration
Debug
val dump : unit -> (int * string) list