bizarrerie du typage

From: David Monniaux (David.Monniaux@ens-lyon.fr)
Date: Sun Jan 12 1997 - 20:19:43 MET


Date: Sun, 12 Jan 1997 20:19:43 +0100 (MET)
From: David Monniaux <David.Monniaux@ens-lyon.fr>
To: Caml-list <caml-list@inria.fr>
Subject: bizarrerie du typage

J'ai un exemple assez amusant de bizarreries du typage:

        Objective Caml version 1.01
 
#let zero = fun x y -> y;;
val zero : 'a -> 'b -> 'b = <fun>
#let succ = fun n f x -> n f (f x);;
val succ : (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'c = <fun>
#let un = succ zero;;
val un : ('_a -> '_b) -> '_a -> '_b = <fun>
#let deux = succ un;;
val deux : ('_a -> '_a) -> '_a -> '_a = <fun>
#deux (fun x -> x) 0;;
- : int = 0
#deux;;
- : (int -> int) -> int -> int = <fun>

Pourquoi le type de "deux" a-t-il changé?
(cela fait aussi avec la version 1.03)

N'aurais-je rien compris au système de typage du CAML?
Il me semblait pourtant que quand un identificateur était lié à un terme
déjà typé, son type était bien établi (égal à celui de ce terme), et ne
changeait pas...

"Si l'informatique marchait, cela se saurait."



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:09 MET