typer.mli 2.74 KB
Newer Older
1 2
open Ident

3 4 5 6
type t
val serialize: t Serialize.Put.f
val deserialize: t Serialize.Get.f

7
exception NonExhaustive of Types.descr
8
exception Constraint of Types.descr * Types.descr
9
exception ShouldHave of Types.descr * string
10
exception WrongLabel of Types.descr * label
11
exception UnboundId of id * bool
12
exception UnboundExtId of Types.CompUnit.t * id
13
exception ShouldHave2 of Types.descr * string * Types.descr
14
exception Error of string
15 16
exception Warning of string * Types.t

17
val empty_env: t
18

19
val register_types : Types.CompUnit.t -> t -> unit
20
  (* Register types of the environment for the pretty-printer *)
21

22
val enter_cu : U.t -> Types.CompUnit.t -> t -> t 
23
val find_cu  : U.t -> t -> Types.CompUnit.t
24

25 26
val find_value: id -> t -> Types.t
val enter_type: id -> Types.t -> t -> t
27
val iter_values: t -> (id -> Types.t -> unit) -> unit
28

29 30
val typ: t -> Ast.ppat -> Types.Node.t
val pat: t -> Ast.ppat -> Patterns.node
31

32 33 34 35
val dump_types: Format.formatter -> t -> unit
val dump_ns: Format.formatter -> t -> unit
val set_ns_table_for_printer: t -> unit

36 37 38 39 40 41 42 43

val type_schema: t -> U.t -> string -> t

val type_ns : t -> U.t -> Ns.t -> t

val type_expr: t -> Ast.pexpr -> Typed.texpr * Types.descr

val type_defs: t -> (Location.loc * U.t * Ast.ppat) list -> t
44 45 46 47 48 49

val type_let_decl: t -> Ast.ppat -> Ast.pexpr -> 
  t * Typed.let_decl * (id * Types.t) list

val type_let_funs: t -> Ast.pexpr list -> 
  t * Typed.texpr list * (id * Types.t) list
50
  (* Assume that all the expressions are Abstractions *)
51

52

53
val get_schema_validator: string -> Ns.qname -> Value.t -> Value.t
54
val get_schema_names: t -> U.t list  (** registered schema names *)
55

56 57
(* Operators *)

58
type type_fun = Types.t -> bool -> Types.t
59

60
val register_op: string -> int -> (type_fun list -> type_fun) -> unit
61
val flatten: type_fun -> type_fun
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102



module IType : sig
  type node

  val get_type: node -> Types.t

  val itype: Types.t -> node
  val delayed: unit -> node
  val link: node -> node -> unit

  val ior: node -> node -> node

  val times: node -> node -> node
  val record: bool -> (node * node option) Ident.label_map -> node
  val xml: node -> node -> node
  val optional: node -> node

  val get_ct: node -> bool * (node * node option) Ident.label_map * node

(* Regular expression *)
  type regexp
  val rexp: regexp -> node
  val simplify_regexp: regexp -> regexp
  val eps: regexp
  val emp: regexp
  val seq: regexp -> regexp -> regexp
  val alt: regexp -> regexp -> regexp
  val star: regexp -> regexp
  val mix: regexp -> regexp
  val elem: node -> regexp
end

(* Foward definitions *)
val from_comp_unit: (Types.CompUnit.t -> t) ref
val has_comp_unit: (U.t -> bool) ref
val has_ocaml_unit: (U.t -> bool) ref
val has_static_external: (string -> bool) ref
val load_schema: 
  (U.t -> string -> (Types.t * (Value.t -> Value.t)) Ident.Env.t) ref