-
(Var)
-
x:s,C |- x : t t=instance(s)
- (Pair)
-
C|- e1 : t1 C|- e2 : t2
C|- (e1,e2) : t1 * t2
- (List)
-
C|- e1 : t C|- e2 : t list
C|- (e1 :: e2) : t list
- (If)
-
C|- e1 : Bool C|- e2 : t C|- e3 : t
C|- (if e1 then e2 else e3) : t
- (App)
-
C|- e1 : t' ® t C|- e2 : t'
C|- (e1 e2) : t
- (Abs)
-
x:t1,C|- e : t2
C|- (function x -> e) : t1 ® t2
- (Let)
-
C|- e1=t1 s = generalize(t1,C) (x:s),C|- e2:t2
C|- let x = e1 in e2 : t2
- (LetRec)
-
(x:a),C|- e1=t1 aÏV(C) s = generalize(t1,C) (x:s),C|- e2:t2
C|- let x = e1 in e2 : t2
Le polymorphisme est introduit dans les règles