* Add dummy implementation
* Add Identifier.t * WIP: typeof? (idk what Im doing)
This commit is contained in:
parent
a4cc6cba38
commit
83b2039262
7 changed files with 61 additions and 2 deletions
9
lib/identifier.ml
Normal file
9
lib/identifier.ml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
type t = string [@@deriving eq, ord, show]
|
||||||
|
|
||||||
|
let fresh =
|
||||||
|
let r = ref 0 in
|
||||||
|
fun () ->
|
||||||
|
let id = "id_" ^ string_of_int !r in
|
||||||
|
incr r;
|
||||||
|
id
|
||||||
|
;;
|
|
@ -1,4 +1,3 @@
|
||||||
type t (* = ... -> Students, this is your job ! *)
|
type t = string [@@deriving eq, ord, show]
|
||||||
[@@deriving eq, ord, show]
|
|
||||||
|
|
||||||
val fresh : unit -> t
|
val fresh : unit -> t
|
||||||
|
|
19
lib/inference.ml
Normal file
19
lib/inference.ml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
let rec typeof = function
|
||||||
|
| Term.Var _ ->
|
||||||
|
(* Une variable n'a pas de type *)
|
||||||
|
None
|
||||||
|
| Term.IntConst _ -> Some Type.Int
|
||||||
|
| Term.Binop (t1, _, t2) ->
|
||||||
|
(* Les 2 types de l'opération sont égaux *)
|
||||||
|
(match typeof t1, typeof t2 with
|
||||||
|
| Some (_ as ty1), Some (_ as ty2) -> if ty1 = ty2 then Some ty1 else None
|
||||||
|
| _ -> None)
|
||||||
|
| Term.Pair (t1, t2) ->
|
||||||
|
(* On forme le produit *)
|
||||||
|
(match typeof t1, typeof t2 with
|
||||||
|
| Some ty1, Some ty2 -> Some (Type.Product (ty1, ty2))
|
||||||
|
| _ -> None)
|
||||||
|
| Term.Proj (_proj, _t) -> failwith "TODO"
|
||||||
|
| Term.Fun (_, _) -> failwith "TODO"
|
||||||
|
| Term.App (_t1, _t2) -> failwith "TODO"
|
||||||
|
;;
|
21
lib/term.ml
Normal file
21
lib/term.ml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
type binop =
|
||||||
|
| Plus
|
||||||
|
| Minus
|
||||||
|
| Times
|
||||||
|
| Div
|
||||||
|
[@@deriving eq, ord, show]
|
||||||
|
|
||||||
|
type projection =
|
||||||
|
| First
|
||||||
|
| Second
|
||||||
|
[@@deriving eq, ord, show]
|
||||||
|
|
||||||
|
type t =
|
||||||
|
| Var of Identifier.t
|
||||||
|
| IntConst of int
|
||||||
|
| Binop of t * binop * t
|
||||||
|
| Pair of t * t
|
||||||
|
| Proj of projection * t
|
||||||
|
| Fun of Identifier.t * t
|
||||||
|
| App of t * t
|
||||||
|
[@@deriving eq, ord, show]
|
6
lib/type.ml
Normal file
6
lib/type.ml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
type t =
|
||||||
|
| Var of Identifier.t
|
||||||
|
| Int
|
||||||
|
| Product of t * t
|
||||||
|
| Arrow of t * t
|
||||||
|
[@@deriving eq, ord, show]
|
4
lib/typeSubstitution.ml
Normal file
4
lib/typeSubstitution.ml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
type t = Type.t Map.Make(Identifier).t
|
||||||
|
|
||||||
|
let apply _t _tt = failwith "TODO"
|
||||||
|
let compose _s2 _s1 = failwith "TODO"
|
1
lib/unification.ml
Normal file
1
lib/unification.ml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
let unify _ty1 _ty2 = failwith "TODO"
|
Reference in a new issue