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

Reply via email to