unsafeCoerce and type aliases under type applications

Joachim Breitner mail at joachim-breitner.de
Sat Dec 3 20:39:43 CET 2011


Am Mittwoch, den 30.11.2011, 10:51 -0200 schrieb Felipe Almeida Lessa:
> > How about using the Down/Dual/Desc/Converse/Opposite/Reverse newtype discussed
> > in another recent thread, and providing for Data.Map:
> >
> >  reverse :: Map k a -> Map (Reverse k) a
> >  reverse Tip = Tip
> >  reverse (Bin n k a l r) = Bin n (Reverse k) a (reverse r) (reverse l)
> >
> > (Arguably we also need reverse' :: Map (Reverse k) a -> Map k a. Hmm...)
>   reverse' :: Map (Reverse k) a -> Map k a
>   reverse' = unsafeCoerce . reverse
> Sorry, couldn't resist =).

have used unsafeCoerce to change the type inside a container to a "type"
alias in real code, but your post makes me wonder: Under what
circumstances is that safe? Is that documented somehow? Can a tool or
the compiler decide for us whether it is safe?


Joachim "nomeata" Breitner
  mail at joachim-breitner.de  |  nomeata at debian.org  |  GPG: 0x4743206C
  xmpp: nomeata at joachim-breitner.de | http://www.joachim-breitner.de/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://www.haskell.org/pipermail/libraries/attachments/20111203/0d4eaaa4/attachment.pgp>

More information about the Libraries mailing list