{-# LANGUAGE CPP, NoImplicitPrelude #-}
module Control.Concurrent.MVar.Compat (
module Base
, withMVarMasked
) where
import Control.Concurrent.MVar as Base
#if !(MIN_VERSION_base(4,7,0))
import Control.Exception (mask_, onException)
import Control.Monad (return)
import Data.Function (($))
import System.IO (IO)
{-# INLINE withMVarMasked #-}
withMVarMasked :: MVar a -> (a -> IO b) -> IO b
withMVarMasked m io =
mask_ $ do
a <- takeMVar m
b <- io a `onException` putMVar m a
putMVar m a
return b
#endif