aboutsummaryrefslogtreecommitdiff
path: root/src/catalog.mli
diff options
context:
space:
mode:
Diffstat (limited to 'src/catalog.mli')
-rw-r--r--src/catalog.mli38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/catalog.mli b/src/catalog.mli
new file mode 100644
index 0000000..e871378
--- /dev/null
+++ b/src/catalog.mli
@@ -0,0 +1,38 @@
+module type DATA_SIG = sig
+
+ type 'a typ
+
+ type 'a returnType
+
+ val compare_typ: 'a typ -> 'b typ -> ('a, 'b) Tools.cmp
+
+ val repr: Format.formatter -> 'a typ -> unit
+
+end
+
+module Make(D:DATA_SIG): sig
+
+ type t
+
+ type 'a t_function =
+ | Fn1: 'b D.returnType * ('a -> 'b) -> 'a t_function
+ | Fn2: 'c D.returnType * ('a -> 'b -> 'c) -> ('a * 'b) t_function
+ | Fn3: 'd D.returnType * ('a -> 'b -> 'c -> 'd) -> ('a * 'b * 'c) t_function
+
+ type 'a sig_typ =
+ | T1: 'a D.typ -> 'a t_function sig_typ
+ | T2: 'a D.typ * 'b D.typ -> ('a * 'b) t_function sig_typ
+ | T3: 'a D.typ * 'b D.typ * 'c D.typ -> ('a * 'b * 'c) t_function sig_typ
+
+ (** Empty catalog *)
+ val empty: t
+
+ (** Register a new function in the catalog *)
+ val register : t -> string -> 'a t_function sig_typ -> 'a t_function -> t
+
+ (** Find a function with the given name and signature *)
+ val find_function: t -> string -> 'a t_function sig_typ -> 'a t_function
+
+ val repr: Format.formatter -> t -> unit
+
+end