Also worth remembering here is that ghc will often unpack such things if it can determine it can do so (but only with optimization iirc), so there is no guarantee that the two will be representationally equivalent even without pragmas.

On Mon, Feb 25, 2019 at 10:17 AM Oleg Grenrus <oleg.grenrus@iki.fi> wrote:
Two data types are `Coercible` (as in Data.Coerce) if their representation in memory is the same: they are representiationally equivalent You ask for looser structural isomorphism, consider e.g. 

    data B b = B {-# UNPACK #-} !Int b

and

    (Int, b)

The values of these types have quite different representation/memory layout.

- Oleg

On 25 Feb 2019, at 16.38, Georgi Lyubenov <godzbanebane@gmail.com> wrote:

Greetings!

Is there any reason behind/what is the reason behind
```
data A a b = A a b
```
and
```
(a, b)
```

not being coercible?

And in general all n-ary constructors not being coercible to one another?

Thanks in advance!

=======
Georgi
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.


--
brandon s allbery kf8nh
allbery.b@gmail.com