Martin Hofmann wrote:
> 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. 

How do you define the "same term"?

One natural way of compiling it would be to

foo (x:y:xs) | x == y = x:xs

but then pattern matching can introduce Eq constraints which some might
see as a bit odd.

> Isn't this allowed, because this would require a strict evaluation of
> the 'x' variables? 

The translation into == would probably introduce some strictness, for
most implementations of Eq. I don't think this is a huge problem in
itself.

Ganesh

=============================================================================== 
 Please access the attached hyperlink for an important electronic 
communications disclaimer: 
 http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html 
 
=============================================================================== 
 
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to