{-# LANGUAGE BangPatterns, Rank2Types, OverloadedStrings,
    RecordWildCards, MagicHash, UnboxedTuples #-}

module Data.Attoparsec.Internal.Fhthagn
    (
      inlinePerformIO
    ) where

import GHC.Exts (realWorld#)
import GHC.IO (IO(IO))

-- | 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@.
inlinePerformIO :: IO a -> a
inlinePerformIO :: forall a. IO a -> a
inlinePerformIO (IO State# RealWorld -> (# State# RealWorld, a #)
m) = case State# RealWorld -> (# State# RealWorld, a #)
m State# RealWorld
realWorld# of (# State# RealWorld
_, a
r #) -> a
r
{-# INLINE inlinePerformIO #-}