FW: H98 Report: expression syntax glitch
Simon Peyton-Jones
simonpj@microsoft.com
Tue, 12 Mar 2002 05:00:36 -0800
In response to my recent message (below), Ross asks:
"Are you rejecting the fix I suggested:
Add a side condition to the grammar in 3.13: the guard must not
end with a type signature (because the following -> looks like
part of the type)."
Indeed, this would be possible. It would reject programs like
f x =3D case x of { (a,b) | b :: Bool -> a }
which are in principle reasonable, but are really hard to parse.
Indeed, GHC, Hugs, and nhc all reject it.
I suppose that the term "ends with" is a bit imprecise, too. Presumably
this would be OK
f x =3D case x of { (a,b) | (b :: Bool) -> a }
Still, Ross's suggestion is pragmatic: if all the impls find this corner
of the language too hard to parse, then some guidance about what=20
not to write would be a good plan.
As usual, this is not a big deal: it's a dark corner that few will trip
over. But it is my joyful task (aided by many others) to try to=20
illuminate the darkness, so I invite your opinions about which
fix (the one below, or Ross's) is better.
Simon
-----Original Message-----
From: Ross Paterson [mailto:ross@soi.city.ac.uk]=20
Sent: 11 March 2002 17:59
To: Simon Peyton-Jones
Subject: Re: H98 Report: expression syntax glitch
Simon,
> Ross points out that this is really hard to parse:
>=20
> | case x of y | ($ True) $ \ z -> z :: Bool -> Bool -> y
>=20
> because the parser doesn't know when to stop eating the type and treat
> the arrow as the case-alternative arrow.
> But in neither case can I see a cure that is better than the
> disease. Remember, large-scale fixes are out of court.
An easier case than Carl's, I think.