On Fri, 2007-11-30 at 04:51 +1100, skaller wrote:
> .
>
> To put this another way the lookup is trying to work on
>
> fun add[t]: t * t // use overloading to bind t
>
> when it should be working on
>
> var add: t * t // no overloading, t is a fixed type
>
> [The actual code handling this is a mess ...]
In particular the Ocaml reads:
and merge_directives syms rs env dirs typeclasses =
let env = ref env in
..
iter
(fun dir -> match dir with
..
| DIR_open (vs,qn) -> add_qn (vs,qn)
)
dirs;
iter add_qn typeclasses;
!env
so that the qualified name Real[t] in this:
ffmt[t with Real[t]] (v:t) => ...
is treated just the same as if
open[t] Real[t];
had been written. But the cases are different. In the first
case 't' should also be pushed into the environment, and
treated the same as a function parameter. But actually,
after binding these textual names, a lookup of add: ...
will find the same environment in both cases and try
to bind the typeclass 't' in both cases.
--
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell. From the desktop to the data center, Linux is going
mainstream. Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Felix-language mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/felix-language