On 29/03/2012 16:00, Rob Arthan wrote:
On 27 Mar 2012, at 22:41, Phil Clayton wrote:
For example, given
infix& datatype t =&
Poly/ML (5.4) reports:
Warning-(&) has infix status but was not preceded by op.
So Poly/ML seems to prefer the use of 'op' in a datatype
declaration. However, if 'op' is present, i.e.
I've had another look at this and committed a change to the parser. I
can't see any reason for producing the warning in this case so I've
removed it. I have a vague feeling that in an early draft of Standard
ML the syntax of datatype bindings more closely resembled pattern
matching so there was a real reason for using "op". Something like
datatype 'a list = nil | 'a :: 'a list
compared with
datatype 'a list = nil | op :: 'a * 'a list
Looking carefully at the syntax, though, "op" is not allowed in a
datatype specification although in all other respects the syntax of a
binding and a specification are the same. I've added an error message
if "op" is used in a specification.
Can anything be done to align the warnings from Poly/ML and SML/NJ
in this respect?
It is, of course, possible to write
local nonfix & in datatype t = & end
This should work in both Poly/ML and SML/NJ although I haven't tested
SML/NJ here.
(f&);
Error-<identifier> expected but ) was found
I would have expected Poly/ML to give a warning on the exception
binding. I also can't explain why it doesn't allow (f&). Maybe David
can give a more accurate explanation of when Poly/ML requires op.
I hadn't actually realised that "op" was allowed on exception bindings
and I've now fixed that. I think a sensible approach is to produce a
warning in the cases where a symbol could be used as an infix; in an
expression, a fun binding or in a pattern (val binding) and to ignore it
in other cases.
The reason that "f &" gives an error is that here we have something that
could actually be an infixed use of "&" but isn't because the right-hand
side is missing. I think it's actually more helpful than producing a
warning. For example,
val a = 1;
val b = a + ;
is probably a missing expression. Producing a warning about a missing
"op" and then an error saying "a" is not a function could well be more
confusing than helpful.
David
_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml