module Graphics.HGL.Internals.Utilities(
bracket, bracket_,
safeTry,
Exception,
modMVar, modMVar_
) where
import qualified Control.Exception as E (bracket, try, IOException, tryJust)
import Control.Concurrent( MVar, takeMVar, putMVar )
bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket = E.bracket
bracket_ :: IO a -> (a -> IO b) -> IO c -> IO c
bracket_ left right m = bracket left right (const m)
type Exception = E.IOException
safeTry :: IO a -> IO (Either Exception a)
safeTry = E.try
modMVar :: MVar a -> (a -> a) -> IO a
modMVar mv f = do
x <- takeMVar mv
putMVar mv (f x)
return x
modMVar_ :: MVar a -> (a -> a) -> IO ()
modMVar_ mv f = do
x <- takeMVar mv
putMVar mv (f x)