From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id EAA22725; Fri, 21 Feb 2003 04:30:45 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id EAA22772 for ; Fri, 21 Feb 2003 04:30:44 +0100 (MET) Received: from mail2.tpgi.com.au (mail.tpgi.com.au [203.12.160.58]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id h1L3UgT13568 for ; Fri, 21 Feb 2003 04:30:42 +0100 (MET) Received: from ozemail.com.au (syd-ts20-2600-106.tpgi.com.au [203.213.127.106]) (authenticated (0 bits)) by mail2.tpgi.com.au (8.11.6/8.11.6) with ESMTP id h1L3UMF05927; Fri, 21 Feb 2003 14:30:23 +1100 Message-ID: <3E559D48.8030800@ozemail.com.au> Date: Fri, 21 Feb 2003 14:30:16 +1100 From: John Max Skaller User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.2.1) Gecko/20010901 X-Accept-Language: en-us MIME-Version: 1.0 To: Basile STARYNKEVITCH CC: caml-list@pauillac.inria.fr Subject: Re: [Caml-list] Error: Type variables, that can not be generalized?! References: <20030220195004.GA1030@first.in-berlin.de> <15957.12915.525441.981424@hector.lesours> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Basile STARYNKEVITCH wrote: > The compiled unit needs to know the type of its hashtable (I don't > know why). The reason is: the interpreter is building a top level program. The compiler isn't: it's building a module. That hashtable might be used by code in another module, and so its type must be known so external client use can be type checked against the type of the hashtable. The only way to use the hashtable from the interpreter is in the top level and the first such use will (usually) fix the type against which subsequent uses can be checked, so the type doesn't have to be fixed until the first use. [What I said isn't quite precise, for example: let h = Hashtble.create 97 in Hashtbl.add 1 [] ;; Here the type *still* isn't fixed even on the first use :=] BTW: I've always been baffled by the seeminly wrong nomenclature 'generalisation' when in fact unification involves *specialising* types/type variables. Does it refer to the seeking of the 'most general' unifier -- that is, the most general specialisation? Error messages like "The type of this expression, ('_a, `_b) Hashtbl.t, contains type variables that cannot be generalized" seem counterintuitive when in fact the problem is that variables can't be made specific enough. -- John Max Skaller, mailto:skaller@ozemail.com.au snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia. voice:61-2-9660-0850 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners