English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] Error: Type variables, that can not be generalized?!
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2003-02-21 (03:30)
From: John Max Skaller <skaller@o...>
Subject: Re: [Caml-list] Error: Type variables, that can not be generalized?!

> 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.

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