Dear Martin,

I think that the (practical) reason is avoiding equality checks during pattern matching.

For instance, how do you evaluate this:

  foo ((+1):(1+):[])    ?

Both expressions in the first and second entries of the list are semantically equivalent, but from an operational point of view, you have to ensure the equality of two functions
over an infinite domain (of integer numbers).

Best regards,

Salvador.


Martin Hofmann escribió:
It is pretty clear, that the following is not a valid Haskell pattern:

foo (x:x:xs) = x:xs

My questions is _why_ this is not allowed. IMHO, the semantics should be
clear: The pattern is expected to succeed, iff 'x' is each time bound to
the same term.
Isn't this allowed, because this would require a strict evaluation of
the 'x' variables?

Thanks,

Martin

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

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

Reply via email to