    {-# LANGUAGE MagicHash, Rank2Types, UnboxedTuples #-}

    -- | This module exports a workaround for this bug:
    --
    --    http://hackage.haskell.org/trac/ghc/ticket/5916
    --
    -- Please read the comments in ghc/libraries/base/GHC/ST.lhs to
    -- understand what's going on here.
    --
    -- Code that uses this module should be compiled with -fno-full-laziness
    module Data.HashMap.Unsafe
        ( runST
        ) where

    import GHC.Base (realWorld#)
    import GHC.ST hiding (runST, runSTRep)

    -- | Return the value computed by a state transformer computation.
    -- The @forall@ ensures that the internal state used by the 'ST'
    -- computation is inaccessible to the rest of the program.
    runST :: (forall s. ST s a) -> a
    runST st = runSTRep (case st of { ST st_rep -> st_rep })
    {-# INLINE runST #-}

    runSTRep :: (forall s. STRep s a) -> a
    runSTRep st_rep = case st_rep realWorld# of
                            (# _, r #) -> r
    {-# INLINE [0] runSTRep #-}