pieuvre/structs.ml

30 lines
641 B
OCaml

(* Variables des λ-termes *)
type var_lambda = string;;
type var = var_lambda;; (* TODEL *)
let varRegex = Str.regexp "^\\([a-z]+\\)\\([0-9]*\\)$";;
(* Variable des types simples *)
type var_type = string;;
type tvar = var_type;; (* TODEL *)
let tvarRegex = Str.regexp "^([A-Z]+)([0-9]*)?$";;
(* Type complexe *)
type ty =
| TSimple of var_type
| TImpl of ty * ty
| TFalse;;
(* λ-terme *)
type lam =
| LFun of var_lambda * ty * lam
| LApp of lam * lam
| LVar of var_lambda
| LExf of lam * ty;;
(* Environnement de typage *)
type gam = (var_type * ty) list;;
(* λ-terme avec des trous *)
type lho = (lam list) -> lam;;