On 2019-12-16 1:42 a.m., Viktor Dukhovni wrote:
Not sure where to post about this, and it has likely been noted
elsewhere already, but reading through the report I see in Section
3.17.2
I'm not sure either, but one place you could report it is at
https://github.com/haskell/rfcs/issues
No guarantees, but it would make the issue slightly less likely to be
forgotten.
• Consider the following declarations:
newtype N = N Bool
data D = D !Bool
These examples illustrate the difference in pattern matching between types
defined by data and newtype:
(\ (N True) -> True) ⊥ ⇒ ⊥
(\ (D True) -> True) ⊥ ⇒ ⊥
(\ ~(D True) -> True) ⊥ ⇒ True
Additional examples may be found in Section 4.2.3.
But unlike the examples in 4.2.3, which do show differences
between "newtype" and "data", the above does not seem to
show any actual difference. For that the pattern after the
constructor would I believe have to be irrefutable, which
"True" is not.
Thus, e.g. the below (which duplicates 4.2.3) would do the job:
(\ (N _) -> True) ⊥ ⇒ True
(\ (D _) -> True) ⊥ ⇒ ⊥
Perhaps I misunderstood something, but if not, and this has
not been noted before, it may be worth fixing in the next
revision.
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime