
You're quite right. You should only be allowed to derive Typeable.
(Which could be arranged by hiding the methods of typeable.)
On Thu, Feb 12, 2009 at 6:24 PM, Jonathan Cast
On Thu, 2009-02-12 at 19:04 +0100, Lennart Augustsson wrote:
They are not unsafe in the way unsafePerformIO is,
I beg permission to demur:
newtype Unsafe alpha = Unsafe { unUnsafe :: alpha } instance Typeable (Unsafe alpha) where typeOf _ = typeOf ()
pseudoSafeCoerce :: alpha -> Maybe beta pseudoSafeCoerce = fmap unUnsafe . cast . Unsafe
Note that
pseudoSafeCoerce = Just . unsafeCoerce
but I regard them as a last resort in certain situations. Still, in those situations they are very useful.
But I would agree with both of these. As long as you *derive* Typeable.
jcc
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe