On 02/11/2006, at 9:56 PM, [EMAIL PROTECTED] wrote:

G'day all.

Quoting Bernie Pope <[EMAIL PROTECTED]>:

This is a weird example of a pattern binding, and it is surprising
(to me) that the syntax is valid.

Maybe.  But you wouldn't balk at this:

    numzeroes xs = sum [ 1 | 0 <- xs ]

...even if you wouldn't naturally express it that way.  Patterns like
this are useful in places other than lets. I'd find it more surprising
if lets were treated as a special case.

In this case you are defining the function which is bound to the
variable called "+".

Though thanks to n+k patterns, this is well-understood to be a
confusing and controversial case.

One would normally expect to see at least one variable inside the
pattern on the
left-hand-side of a pattern binding (otherwise what point would there
be to the
definition?).

If the pattern is demanded (as it may well be in a list comprehension
generator, do block generator or a lambda), then it can be very useful.
The programmer is asking for an error/empty list/monad "fail" if the
conformality check fails.

I agree with what you say. When I said "pattern binding", I was using the
terminology of the Haskell Report, which means only declarations of
the form "pat = exp". Generator statements and lambdas are a different story, as you rightly point out. Nonetheless, I still believe that it is surprising for
"pattern bindings" that this syntax is allowed, since there doesn't
seem to be any purpose to them. (A cursory glance at the Report suggests
that this kind of pattern binding is allowed). Then again, since the bindings are benign, maybe one could argue that it is better to have one less rule in
the language definition? Then again, such a declaration could be the
sign of a buggy program, and it might be better to give a compile time error.

Cheers,
Bernie.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to