Thanks, that's clearer to me now. It confirmed my thoughts: > Matching the pattern con pat against a value, where con is a constructor defined by newtype, depends on the value: > - If the value is of the form con v, then pat is matched against v. > - If the value is ⊥, then pat is matched against ⊥.
Put shorter: newtype TestN = TestN Int TestN x = undefined Then x = undefined. Which means you cannot make a boxed type out of un unboxed one using newtype. That makes sense. 2012/1/22 Roman Cheplyaka <r...@ro-che.info> > * Yves Parès <yves.pa...@gmail.com> [2012-01-22 11:32:30+0100] > > 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.2 > > -- > Roman I. Cheplyaka :: http://ro-che.info/ >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe