packages feed

scenegraph-0.1: src/Graphics/SceneGraph/MySTM.hs

{-# 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