{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, TypeSynonymInstances, TypeOperators #-} {-- At some point I was going to use STM. Rather than change the code back, just use the primitive mappings to MVar. --} module Graphics.SceneGraph.MySTM where import Data.IORef import Control.Concurrent.MVar type STM a = IO a atomically :: MVar Bool -> STM a -> IO a atomically sem f = withMVar sem (\_ -> f) unsafeIOToSTM :: IO a -> STM a unsafeIOToSTM = id type TVar a = IORef a readTVar :: TVar a -> STM a readTVar = readIORef writeTVar :: TVar a -> a -> STM () writeTVar = writeIORef newTVar :: a -> STM (TVar a) newTVar = newIORef