[MLton] Bug with "polymorphic" exns
Stephen Weeks
MLton@mlton.org
Mon, 24 Jan 2005 21:24:54 -0800
> the point is that the type of the let expression (namely, unit) does
> not mention the type variable. Hence, the consequent:
>
> C |- val 'a x = let exception E of 'a in () end => VE' in Env
>
> is derivable by Rule 15
...
Thanks for the detailed explanation and examples. They all made
sense. MLton is buggy in two respects:
1. It rejects expansive valbinds that explicitly bind type variables,
whether or not type variables appear in the type.
2. It treats every valbind as expansive if any of the right-hand sides
are, when it should treat each "<pat> = <exp>" separately. For
example, it incorrectly rejects
val f = fn x => x
and r = ref 13
val _ = (f 1; f true);
I've looked at the front end and think there is a reasonably simple
fix to these problems, but I want to sleep on it before putting it
in. I hope to report a bugfix tomorrow.