A lot. If everything were irrefutable, then the following:
mymap f (x:xs) = f x : xs mymap f [] = []
would never get to the second branch and would fail when it reached the end of a list. so would it if you put the lines in the other, "more natural," order, though perhaps it's less clear why. A lot of things would break if this were changed. Refutable patterns are definitely the norm, not the exception. On Tue, 30 Mar 2004, S. Alexander Jacobson wrote:
Thanks for the ~ syntax, but my question is really why you need it? What benefit do you get from "refutable patterns"?
Alternatively, would anything break if a future Haskell just treated all patterns as irrefutable?
-Alex-
_________________________________________________________________ S. Alexander Jacobson mailto:me@alexjacobson.com tel:917-770-6565 http://alexjacobson.com
On Tue, 30 Mar 2004, Martin [ISO-8859-1] Sjögren wrote:
tis 2004-03-30 klockan 17.30 skrev S. Alexander Jacobson:
I would assume that this function:
foo list@(h:t) = list
is equivalent to
foo list = list where (h:t)=list
But passing [] to the first generates an error even though h and t are never used! Passing [] to the second works just fine.
You can write this as
foo' list@(~(h:t)) = list
foo' [] will evaluate to []. The H98 report calls it an "irrefutable pattern", IIRC.
Regards, Martin
_______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell
-- Hal Daume III | hdaume@isi.edu "Arrest this man, he talks in maths." | www.isi.edu/~hdaume