Lennart wrote (snipped):
> An "easy" way to
> prove it is to provide an equivalent implementation that uses only
> pure functions. As far as I remember Control.Monad.ST can be written
> purely. And I think the same is true for Data.Dynamic.
I don't see how it can be, since you can use Data.Dynamic to provide an
unsafe function
cast : a -> b
newtype UnsafeCast a = UnsafeCast a
instance Typeable (UnsafeCast a) where
typeOf _ = mkAppTy (mkTyCon "") []
cast :: a -> b
cast a =
let
Just (UnsafeCast b) = fromDynamic (toDyn (UnsafeCast a))
in
b