dyna-0.1.0.0: src/Dyna/Ref.hs
module Dyna.Ref(
IsRef(..),
) where
import Data.IORef
import Control.Concurrent.STM
import Control.Concurrent.STM.TVar
class IsRef ref where
newRef :: a -> IO (ref a)
readRef :: ref a -> IO a
writeRef :: ref a -> a -> IO ()
modifyRef :: ref a -> (a -> a) -> IO ()
instance IsRef IORef where
newRef = newIORef
readRef = readIORef
writeRef = writeIORef
modifyRef = modifyIORef'
instance IsRef TVar where
newRef = newTVarIO
readRef = readTVarIO
writeRef ref v = atomically $ writeTVar ref v
modifyRef ref f = atomically $ modifyTVar' ref f