summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libraries/ghc-prim/GHC/Magic.hs29
-rw-r--r--libraries/ghc-prim/ghc-prim.cabal1
2 files changed, 30 insertions, 0 deletions
diff --git a/libraries/ghc-prim/GHC/Magic.hs b/libraries/ghc-prim/GHC/Magic.hs
new file mode 100644
index 0000000000..b450e79b39
--- /dev/null
+++ b/libraries/ghc-prim/GHC/Magic.hs
@@ -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
+
diff --git a/libraries/ghc-prim/ghc-prim.cabal b/libraries/ghc-prim/ghc-prim.cabal
index ea52c3235f..c887b6c7ae 100644
--- a/libraries/ghc-prim/ghc-prim.cabal
+++ b/libraries/ghc-prim/ghc-prim.cabal
@@ -25,6 +25,7 @@ Library {
GHC.Bool
GHC.Debug
GHC.Generics
+ GHC.Magic
GHC.Ordering
GHC.PrimopWrappers
GHC.IntWord32