proposal: add 'unsafeCoerce'
Donald Bruce Stewart
dons at cse.unsw.edu.au
Mon Nov 20 00:42:58 EST 2006
iavor.diatchki:
> Hello,
> I think that it is a really bad idea to make 'unsafeCoerce' a part of
> the standard libraries. As far as I understand, 'unsafeCoerce' is
> only "safe" if the programmer assumes something about the
> representations of values (in particular, that values of different
> types have the same representations). Haskell makes no such
> guarantees so, by definition, any program that uses 'unsafeCoerce' is
> using an implementation specific extension. I was trying ot think of
> cases where 'unsafeCoerce' might be somewhat safe, and the main
> example I came up with is when the coersion happens on a phantom type.
> Are there other reasonably portable examples?
Perhaps the implementations of Data.Typeable (assuming the underlying
Typeable stuff was portable):
cast :: (Typeable a, Typeable b) => a -> Maybe b
cast x = r
where
r = if typeOf x == typeOf (fromJust r)
then Just $ unsafeCoerce x
else Nothing
Its another case of the programmer having a proof not expressible in the
type system. I suspect there will be more of these in the future as
people write more and more proof/type system preprocessing tools and
compilers.
-- Don
More information about the Libraries
mailing list