Commits

Bryan O'Sullivan committed c827bab

Oops, forgot a file.

Comments (0)

Files changed (1)

Statistics/Internal.hs

+{-# LANGUAGE CPP, MagicHash, UnboxedTuples #-}
+-- |
+-- Module    : Statistics.Internal
+-- Copyright : (c) 2009 Bryan O'Sullivan
+-- License   : BSD3
+--
+-- Maintainer  : bos@serpentine.com
+-- Stability   : experimental
+-- Portability : portable
+--
+-- Scary internal functions.
+
+module Statistics.Internal
+    (
+      inlinePerformIO
+    ) where
+
+#if __GLASGOW_HASKELL__ >= 611
+import GHC.IO (IO(IO))
+#else
+import GHC.IOBase (IO(IO))
+#endif
+import GHC.Base (realWorld#)
+#if !defined(__GLASGOW_HASKELL__)
+import System.IO.Unsafe (unsafePerformIO)
+#endif
+
+-- Lifted from Data.ByteString.Internal so we don't introduce an
+-- otherwise unnecessary dependency on the bytestring package.
+
+-- | Just like unsafePerformIO, but we inline it. Big performance
+-- gains as it exposes lots of things to further inlining. /Very
+-- unsafe/. In particular, you should do no memory allocation inside
+-- an 'inlinePerformIO' block. On Hugs this is just @unsafePerformIO@.
+{-# INLINE inlinePerformIO #-}
+inlinePerformIO :: IO a -> a
+#if defined(__GLASGOW_HASKELL__)
+inlinePerformIO (IO m) = case m realWorld# of (# _, r #) -> r
+#else
+inlinePerformIO = unsafePerformIO
+#endif