
On Wednesday 27 June 2007, Andrew Coppin wrote:
I have a tricky little question...
Suppose I write a function like this:
foo pattern1
| gard1 = ... | gard2 = ...
foo pattern2
| gard3 = ... | gard4 = ...
According to one tutorial I read, if pattern1 matches, pattern2 will never be tried, even if both guard1 and guard2 fail.
And according to another tutorial I read, if pattern1 matches but all guards fail, pattern2 *will* be tried.
Can somebody comfirm which one is actually correct?
You could just try it, you know . . . Anyway, the second tutorial is correct: if all guards on pattern1 fail, pattern2 will be tried next. See Section 3.17.3 in the Haskell Report [1]. Btw., which was the first tutorial? Sincerely, Jonathan Cast http://sourceforge.net/projects/fid-core http://sourceforge.net/projects/fid-emacs [1] http://haskell.org/onlinereport/exps.html#case-semantics