[MLton] A Possible "Bug"?

Baojian Hua huabj at mail.ustc.edu.cn
Mon Dec 21 21:47:16 PST 2009




> -----Original E-mail-----
> From: "Matthew Fluet" <matthew.fluet at gmail.com>
> Sent Time: 2009-12-19 1:02:21
> To: "Henry Cejtin" <henry.cejtin at sbcglobal.net>
> Cc: "Baojian Hua" <huabj at mail.ustc.edu.cn>, mlton <mlton at mlton.org>
> Subject: Re: [MLton] A Possible "Bug"?
> 
> On Fri, Dec 18, 2009 at 9:15 AM, Henry Cejtin
> <henry.cejtin at sbcglobal.net> wrote:
> > I  would  say  that  MLton is correct and SML/NJ is wrong.
> 
> Agreed, with the caveat noted below.
> 
> > The point is
> > that the left hand side of the binding in
> >    val [[x]] = []
> > is a non-exhaustive pattern and the right hand side does not match any of
> > the  cases.  (The type is correct though.)  Hence evaluating this should
> > result in the Bind exception being raised.
> >
> > At least in v110.67 of SML/NJ, that is what happens.
> >
> > Perhaps you are being confused by the fact that  the  exception  raising
> > happens  at  evaluation  time.   In  MLton,  that  is  when  you run the
> > executable, but in SML/NJ, it is when you enter the  expression  to  the
> > read-eval-print loop.
> 
> There is a subtle difference in SML/NJ's behavior:
> 
> Standard ML of New Jersey v110.71 [built: Thu Oct  1 09:13:22 2009]
> - val [[x]] = [];
> 
> unexpected exception (bug?) in SML/NJ: Bind [nonexhaustive binding failure]
>   raised at: stdIn:1.5-1.15
>              ../compiler/MiscUtil/print/ppobj.sml:396.20
>              ../compiler/TopLevel/interact/evalloop.sml:44.55
> 
> - val SOME x = NONE;
> 
> unexpected exception (bug?) in SML/NJ: Bind [nonexhaustive binding failure]
>   raised at: stdIn:1.5-1.18
>              ../compiler/MiscUtil/print/ppobj.sml:396.20
>              ../compiler/TopLevel/interact/evalloop.sml:44.55
> 
> - val NONE = SOME 1;
> 
> uncaught exception Bind [nonexhaustive binding failure]
>   raised at: stdIn:1.5-1.18
> 
> The last is what I would expect to see in all cases.  The others seem
> to be a case where the the REPL isn't expecting a Bind exception; it
> seem to be related to patterns that should be binding variables (i.e.,
> they are entered into the static environment), but then are not bound
> due to the pattern match failure (i.e, they are not entered into the
> dynamic environment).
> 
Yes, I'd tried it.

And reading the compiler output:
  unexpected exception (bug?) in SML/NJ: Bind [nonexhaustive binding failure]

it seems that SML/NJ treats it a bug in itself, rather than a Binding exception.
(Though I've not read its source code.)

> > Note,  if  SML/NJ  did  not  issue a warning about the binding not being
> > exhaustive then that would be a bug in their code.
> 
> Except that the Defn states: "However, this warning should not be
> given when the binding is a component of a top-level declaration...."
> MLton gives pattern-match warnings in all cases.
> 
> 
> > ----- Original Message ----
> > From: Baojian Hua <huabj at mail.ustc.edu.cn>
> > To: mlton <mlton at mlton.org>
> > Sent: Fri, December 18, 2009 4:02:57 AM
> > Subject: [MLton] A Possible "Bug"?
> >
> > ...
> >
> > However, I happened to run this code:
> > val [[x]] = [];
> >
> > MLton reports a warning message, but smlnj-110.71 reports
> > an error (compiler bug?). I'd like to ask here that which
> > behaves correctly?
> >
> > _______________________________________________
> > MLton mailing list
> > MLton at mlton.org
> > http://mlton.org/mailman/listinfo/mlton




More information about the MLton mailing list