[Haskell-cafe] Haskell 2010 report nit?

Viktor Dukhovni ietf-dane at dukhovni.org
Mon Dec 16 06:42:39 UTC 2019


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

> • 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.

-- 
	Viktor.



More information about the Haskell-Cafe mailing list