
On Sun, Nov 08, 2015 at 10:42:35AM +0100, Joachim Breitner wrote:
Am Sonntag, den 08.11.2015, 09:30 +0000 schrieb Tom Ellis:
Simon's code is inadvisable, in my opinion. It is
f xs | null xs = blah | otherwise = x+1 where (x:_) = xs
where it really should be
f xs = case xs of [] -> blah (x:_) -> x + 1
yes, in this particular, small example
But often you have complex decisions in the guards that are not obviously related to the pattern match, and the where-bound and partially-pattern-matched value are used in multiple branches of the guard.
I can't address less particular, larger, examples until I'm shown them, but I am going to make the very bold claim that there's *always* a version without partial pattern matches that is at least as clear as the original. I strongly encourage you to challenge me on this claim! Tom