Browse thread
Typing problem
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | jean-marc alliot <alliot@r...> |
| Subject: | Typing problem |
We recently found a quite annoying problem with the typing system in ocaml 2.99, and Jacques Garrigue explained it to us very kindly. Other people might be be interested however. The problem is summarized in the following code: First let's define two types: type t1 = (?l:int -> unit -> unit) type t = Toto of t1 Then the function: let f1 g = g l:3 (); (Toto g);; This function doesn't compile and the compiler error message is somewhat cryptic at first sight: File "toto.ml", line 11, characters 8-9: This expression has type int -> unit -> 'a but is here used with type t1 = ?l:int -> unit -> unit To make it compile, you have to type explicitly g with: let f2 (g : t1) = g l:3 (); (Toto g);; We would very much like to see this clearly documented in ocaml 2.99 reference manual, as it is a serious change in the behavior of the typing system. Determinism is lost, as typing f1 would succeed if typing was done in reverse order (from last line to first line). Perhaps also a different error message from the compiler would help in detecting such problems. P Brisset JM Alliot