Add new GHC.Magic module
[ghc-prim.git] / GHC / Magic.hs
diff --git a/GHC/Magic.hs b/GHC/Magic.hs
new file mode 100644 (file)
index 0000000..b450e79
--- /dev/null
@@ -0,0 +1,29 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  GHC.Magic
+-- Copyright   :  (c) The University of Glasgow 2009
+-- License     :  see libraries/ghc-prim/LICENSE
+--
+-- Maintainer  :  cvs-ghc@haskell.org
+-- Stability   :  internal
+-- Portability :  non-portable (GHC Extensions)
+--
+-- GHC magic.
+-- Use GHC.Exts from the base package instead of importing this
+-- module directly.
+--
+-----------------------------------------------------------------------------
+
+{-# OPTIONS_GHC -XNoImplicitPrelude #-}
+
+module GHC.Magic (inline) where
+
+-- | The call '(inline f)' reduces to 'f', but 'inline' has a BuiltInRule
+-- that tries to inline 'f' (if it has an unfolding) unconditionally
+-- The 'NOINLINE' pragma arranges that inline only gets inlined (and
+-- hence eliminated) late in compilation, after the rule has had
+-- a good chance to fire.
+inline :: a -> a
+{-# NOINLINE[0] inline #-}
+inline x = x
+