aboutsummaryrefslogtreecommitdiff
path: root/library/libobject.mli
diff options
context:
space:
mode:
authorMaxime Dénès2019-06-11 10:49:25 +0200
committerMaxime Dénès2019-06-28 13:28:03 +0200
commit19ea68ecafcee5199dde1b044fd4be9edc211673 (patch)
treef6a6fec1e8825371cbdab78931d0dd5c831dd15b /library/libobject.mli
parenta4f6189978b15df8ce4cc8c8fcb8acb6f069ee8e (diff)
Reify libobject containers
We make a few libobject constructions (Module, Module Type, Include,...) first-class and rephrase their handling in direct style (removing the inversion of control). This makes it easier to define iterators over objects without hacks like inspecting the tags of dynamic objects.
Diffstat (limited to 'library/libobject.mli')
-rw-r--r--library/libobject.mli16
1 files changed, 16 insertions, 0 deletions
diff --git a/library/libobject.mli b/library/libobject.mli
index a7151d3bf2..3b37db4a6f 100644
--- a/library/libobject.mli
+++ b/library/libobject.mli
@@ -103,6 +103,22 @@ val ident_subst_function : substitution * 'a -> 'a
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
+ | ImportObject of { export : bool; mp : Names.ModPath.t }
+ | 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)