proposal: add 'unsafeCoerce'

David House dmhouse at
Tue Nov 21 10:11:18 EST 2006

On 20/11/06, Simon Marlow <simonmarhaskell at> wrote:
>  * cast that changes a phantom type, or changes a type that is not
>    reflected by a part of the value,
>    eg. 'unsafeCoerce (Left 3) :: Either Int a' should be fine for any 'a',

Couldn't we have the following for this case?

castEitherL :: Either a b -> Either a c
castEitherL (Left x) = Left x
castEitherL z = z

castEitherR :: Either a b -> Either c b
castEitherR (Right x) = Right x
castEitherR z = z

Not general, but it'd work in this case. And no need for unsafeCoerce.

-David House, dmhouse at

More information about the Libraries mailing list