
Adding +ghc-devs
Hi Michal,
Datas aren't coercible, only newtypes. This is why you can't coerce Ints and Words, and why Foo and Bar don't work.
Sandy
On Sat, Oct 5, 2019 at 4:17 PM Michal Terepeta
wrote: Hi,
I've started looking into using `Data.Coerce` (and the `Coercible` type-class) for a personal project and was wondering why coercing between `Int` and `Word` is not allowed? I don't see any fundamental reason why this shouldn't work...
Perhaps, it's just a matter of GHC's implementation details leaking out? IIRC internally GHC has separate `RuntimeRep`/`PrimRep` for a `Word#` and for an `Int#`. If that's the case, would it make sense to unify these? Their actual runtime representation should be the same and I'd expect most (all?) of their differences should be attached to `PrimOp`s.
And that leads me to another question--what exactly goes wrong here: ``` data Foo = Foo Int# data Bar = Bar Int#
test :: Bar test = coerce (Foo 42#) ``` Which fails with: "Couldn't match representation of type ‘Foo’ with that of ‘Bar’ arising from a use of ‘coerce’"
Perhaps I'm just misunderstanding exactly how `Coercible` works?
Thanks in advance!
- Michal
PS. The ability to coerce through things like lists is amazing :) _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
-- I'm currently travelling the world, sleeping on people's couches and doing full-time collaboration on Haskell projects. If this seems interesting to you, please consider signing up as a host! https://isovector.github.io/erdos/