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 <roma@ro-che.info>
* Yves Parès <yves.pares@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/