
On Wed, Mar 18, 2009 at 1:49 PM, Tom.Amundsen
Hi All,
I am new to Haskell. I just started reading "Real World Haskell" a few days ago, so I apologize for being such a noob.
But, I am curious why I see a lot of code where people do pattern matching via multiple function declarations instead of using the case ... of ... construct? For example:
[code] foldl' _ zero [] = zero foldl' step zero (x:xs) = let new = step zero x in new `seq` foldl' step new xs [/code]
instead of this, which I prefer:
[code] foldl' f acc xs = case xs of [] -> acc (x:xs) -> let new = f acc x in new `seq` foldl' f new xs [/code]
Personally, I prefer the former for several reasons: it has less syntax (no case...of...->...-> stuff), it's easier to manipulate textually, it's less indented, and it's somewhat mentally easier to follow, since case feels imperative and step-by-step. Might as well ask why people prefer guard syntax to nesting if-then-elses; sure, they may be converted into the same code under the hood and be equivalent in power, but one scales better (in terms of clarity). -- gwern