Use explicit language extensions & remove extension fields from base.cabal
[ghc-base.git] / Unsafe / Coerce.hs
index 42567a9..421cdd0 100644 (file)
@@ -1,4 +1,5 @@
-{-# OPTIONS_GHC -fno-implicit-prelude #-}
+{-# LANGUAGE CPP, NoImplicitPrelude, MagicHash #-}
+
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Unsafe.Coerce
 -- type to any other type.  Needless to say, if you use this function,
 -- it is your responsibility to ensure that the old and new types have
 -- identical internal representations, in order to prevent runtime corruption.
+--
+-- 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