proposal: add 'unsafeCoerce'
Malcolm.Wallace at cs.york.ac.uk
Tue Nov 21 12:35:12 EST 2006
"David House" <dmhouse at gmail.com> 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
No actually. Try it! Any compiler will reject the catch-all cases
('z') because you are asking for the usage of z on the rhs to be at a
different type than the pattern usage of z on the lhs.
More information about the Libraries