aboutsummaryrefslogtreecommitdiff
path: root/evaluator.mli
blob: d69bba6e8a2d117eda820fec367811f656ca6b77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
val repr: (ScTypes.refs -> ScTypes.types option ScTypes.Refs.range) -> ScTypes.expression -> ScTypes.types

(** Type definitions *)

type 'a typ 
val t_bool: DataType.Bool.t typ
val t_int:  DataType.Num.t  typ
val t_string: UTF8.t typ
val t_list: 'a typ -> 'a list typ

(** Result formats *)

type 'a result

(** Numeric (any format) *)
val f_num: DataType.Num.t result

(** Date *)
val f_date: DataType.Num.t result

(** Number *)
val f_number: DataType.Num.t result

(** Boolean result *)
val f_bool: DataType.Bool.t result

(** String *)
val f_string: DataType.String.t result

(** Catalog *)

(** We cannot update an existing function. Any [registerX] function will raise
 [RegisteredFunction] if a function with the same signature already exists in the catalog. *)
exception RegisteredFunction

val register0: 
  string ->           (* The function name *)
  'a result ->        (* The return type *)
  (unit -> 'a)        (* The function to call *)
  -> unit

val register1: 
  string ->           (* The function name *)
  'a typ ->           (* The signature *)
  'b result ->        (* The return type *)
  ('a -> 'b)          (* The function to call *)
  -> unit

val register2: 
  string ->           (* The function name *)
  ('a typ * 'b typ) ->(* The signature *)
  'c result ->        (* The return type *)
  ( 'a -> 'b -> 'c)   (* The function to call*)
  -> unit

val register3: 
  string ->           (* The function name *)
  ('a typ * 'b typ * 'c typ) ->(* The signature *)
  'd result ->           (* The return type *)
  ( 'a -> 'b -> 'c -> 'd)   (* The function to call*)
  -> unit


(** [wrap f] run [f] inside a context where there is no functions *)
val wrap: (unit -> 'a) -> 'a