-{-# OPTIONS_GHC -fno-implicit-prelude #-}
+{-# OPTIONS_GHC -XNoImplicitPrelude #-}
-----------------------------------------------------------------------------
-- |
-- Module : Unsafe.Coerce
-- it is your responsibility to ensure that the old and new types have
-- identical internal representations, in order to prevent runtime corruption.
--
--- 'unsafeCoerce' is just a trivial wrapper for 'unsafeCoerce#';
--- see the latter for important documetation about correct usage.
+-- The types for which 'unsafeCoerce' is representation-safe may differ
+-- from compiler to compiler (and version to version).
+--
+-- * Documentation for correct usage in GHC will be found under
+-- 'unsafeCoerce#' in GHC.Base (around which 'unsafeCoerce' is just a
+-- trivial wrapper).
+--
+-- * In nhc98, the only representation-safe coercions are between Enum
+-- types with the same range (e.g. Int, Int32, Char, Word32),
+-- or between a newtype and the type that it wraps.
module Unsafe.Coerce (unsafeCoerce) where
#if defined(__GLASGOW_HASKELL__)
-import GHC.Base (unsafeCoerce#)
+import GHC.Prim (unsafeCoerce#)
unsafeCoerce :: a -> b
unsafeCoerce = unsafeCoerce#
#endif