the dreaded offside rule
Ben Rudiak-Gould
Benjamin.Rudiak-Gould at cl.cam.ac.uk
Thu Mar 9 21:00:56 EST 2006
Ian Lynagh wrote:
> On Thu, Mar 09, 2006 at 04:53:52PM -0000, Simon Marlow wrote:
>> the problem is that 'let' does not always have a
>> matching 'in', e.g. when it is used in 'do', pattern guards or list
>> comprehensions. So you can't consistently treat let/in as brackets.
>
> Right, I mentioned that in my earlier mail. However, I think this can be
> handled by rules like
>
> L (<n>:ts) ((Let:bs,m):bsms) = L ts ((bs,m):bsms) if m = n
Here's a tricky case:
... | let x, y :: T
x = 3
y = 4,
...
The first , shouldn't close the let statement, but the second should. How do
you distinguish between them? If you never allow , to close a let statement,
then you can no longer write
... | let x = 3, ...
Of course, the commas in type signatures and fixity declarations are
redundant anyway. If they were dropped from the grammar, this problem would
go away.
> Incidentally, in my head the "," in "(case x of p -> e, 42)" acts as a
> right and left bracketing lexeme, so this expression would still be
> accepted.
Here's another tricky case:
(case p of q | r,s -> t, ...)
I'm not sure what to do about this one.
-- Ben
More information about the Haskell-prime
mailing list