
* Yves Parès
These make me think that pattern matching against a newtype is always lazy (irrefutable). Am I right?
Yes.
Is there some litterature expliciting in a less empiric way than I did the differences like this between data and newtype? I've never come against such documentation through all my learning of Haskell, yet I think it's an important point.
See the Haskell report, section 3.17.2 "Informal Semantics of Pattern Matching" [1]. In particular, this paragraph: The irrefutable patterns are as follows: a variable, a wildcard, N apat where N is a constructor defined by newtype and apat is irrefutable (see Section 4.2.3), var@apat where apat is irrefutable, or of the form ~apat (whether or not apat is irrefutable). All other patterns are refutable. [1]: http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-600003.17... -- Roman I. Cheplyaka :: http://ro-che.info/