summaryrefslogtreecommitdiff
path: root/ocaml-binary-annot/typing/subst.mli
diff options
context:
space:
mode:
Diffstat (limited to 'ocaml-binary-annot/typing/subst.mli')
-rw-r--r--ocaml-binary-annot/typing/subst.mli58
1 files changed, 58 insertions, 0 deletions
diff --git a/ocaml-binary-annot/typing/subst.mli b/ocaml-binary-annot/typing/subst.mli
new file mode 100644
index 0000000000..c861a57be3
--- /dev/null
+++ b/ocaml-binary-annot/typing/subst.mli
@@ -0,0 +1,58 @@
+(***********************************************************************)
+(* *)
+(* Objective Caml *)
+(* *)
+(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
+(* *)
+(* Copyright 1996 Institut National de Recherche en Informatique et *)
+(* en Automatique. All rights reserved. This file is distributed *)
+(* under the terms of the Q Public License version 1.0. *)
+(* *)
+(***********************************************************************)
+
+(* $Id$ *)
+
+(* Substitutions *)
+
+open Types
+
+type t
+
+(*
+ Substitutions are used to translate a type from one context to
+ another. This requires substituing paths for identifiers, and
+ possibly also lowering the level of non-generic variables so that
+ it be inferior to the maximum level of the new context.
+
+ Substitutions can also be used to create a "clean" copy of a type.
+ Indeed, non-variable node of a type are duplicated, with their
+ levels set to generic level. That way, the resulting type is
+ well-formed (decreasing levels), even if the original one was not.
+*)
+
+val identity: t
+
+val add_type: Ident.t -> Path.t -> t -> t
+val add_module: Ident.t -> Path.t -> t -> t
+val add_modtype: Ident.t -> module_type -> t -> t
+val for_saving: t -> t
+val reset_for_saving: unit -> unit
+
+val module_path: t -> Path.t -> Path.t
+val type_path: t -> Path.t -> Path.t
+
+val type_expr: t -> type_expr -> type_expr
+val class_type: t -> class_type -> class_type
+val value_description: t -> value_description -> value_description
+val type_declaration: t -> type_declaration -> type_declaration
+val exception_declaration:
+ t -> exception_declaration -> exception_declaration
+val class_declaration: t -> class_declaration -> class_declaration
+val cltype_declaration: t -> cltype_declaration -> cltype_declaration
+val modtype: t -> module_type -> module_type
+val signature: t -> signature -> signature
+val modtype_declaration: t -> modtype_declaration -> modtype_declaration
+
+(* Composition of substitutions:
+ apply (compose s1 s2) x = apply s2 (apply s1 x) *)
+val compose: t -> t -> t