{-# 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