
I disagree. Отправлено с iPad
9 авг. 2015 г., в 12:37, Tom Ellis
написал(а): On Sun, Aug 09, 2015 at 12:15:47PM +0200, MigMit wrote:
Right, you can distinguish data declarations from newtype declarations this way, but by using Template Haskell you can also distinguish
* data A = A Int * data A = A { a :: Int } * data A = A' Int * data A = A Int !(), and * newtype B = B A (where A has one of the above definitions)
Sure, because they are different.
from each other. My claim is that
* data B = B !A
is as indistinguishable from the above four as they are from each other.
Can you please NOT say that some thing can be distinguished AND that they are indistinguishable in the same post?
I think we are perhaps talking at cross purposes.
To clarify, here is an explicit statement (somewhat weaker than the full generality of my claim):
`data D = D !T` and `newtype N = N T` are isomorphic in the sense that there exist `f :: D -> N` and `g :: N -> D` such that `f . g = id` and `g . f = id`.
Do you agree or disagree with this statement? Then we may proceed.
Tom _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe