[Haskell-cafe] Why isn't pattern matching lazy by default?

Chaddaï Fouché chaddai.fouche at gmail.com
Wed Sep 19 11:45:44 EDT 2007

2007/9/19, Miguel Mitrofanov <miguelimo38 at yandex.ru>:
> >> Now why isn't pattern matching lazy by default?  This seems odd
> >> for a newbie since everything else is lazy by default.
> >
> > It's even more confusing that pattern matching in 'let' _is_ lazy.
> No, it's not.
> See, in let or where constructs you don't have a choice; you can't do
> different things depending on whether some value is Just x or
> Nothing. Therefore, there is no need to perform pattern matching
> strictly.

In other words, the pattern matching in case can't be lazy by default
since the primary purpose of case is to choose an alternative and for
that you NEED to evaluate the matched value. In let or where, the
pattern matching is only there to allow convenient deconstruction of
the value, but you don't make any choice based on the form of the
value, so you can afford to be lazy (which is the default in the
language everywhere it makes sense, it doesn't in a normal "case"
If you want to use your pattern matching in a case only to deconstruct
the value but not to choose an alternative, you need to specify it
using ~ .

So, IMHO, the rules on strictness of the pattern matching are
perfectly consistent and clear. You just need to reflect on the
purpose of the constructs where you use it..


More information about the Haskell-Cafe mailing list