put 'unsafeCoerce' in a standard location
[ghc-base.git] / Unsafe / Coerce.hs
diff --git a/Unsafe/Coerce.hs b/Unsafe/Coerce.hs
new file mode 100644 (file)
index 0000000..a90b149
--- /dev/null
@@ -0,0 +1,30 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Unsafe.Coerce
+-- Copyright   :  Malcolm Wallace 2006
+-- License     :  BSD-style (see the LICENSE file in the distribution)
+--
+-- Maintainer  :  libraries@haskell.org
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- The highly unsafe primitive 'unsafeCoerce' converts a value from any
+-- 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.
+
+module Unsafe.Coerce (unsafeCoerce) where
+
+#if defined(__GLASGOW_HASKELL__)
+import GHC.Base (unsafeCoerce#)
+unsafeCoerce :: a -> b
+unsafeCoerce = unsafeCoerce#
+#endif
+
+#if defined(__NHC__)
+import NonStdUnsafeCoerce (unsafeCoerce)
+#endif
+
+#if defined(__HUGS__)
+import Hugs.Base (unsafeCoerce)
+#endif