statethread-0.1: src/Data/STRef/Strict.hs
module Data.STRef.Strict (
STRef,
newSTRef,
readSTRef,
writeSTRef,
modifySTRef,
) where
import Control.Monad.ST.Strict (ST, )
import qualified Control.Monad.ST.Strict as Strict
import qualified Data.IORef as IORef
newtype STRef s a = STRef {unSTRef :: IORef.IORef a}
newSTRef :: a -> ST s (STRef s a)
newSTRef a =
Strict.unsafeIOToST (fmap STRef (IORef.newIORef a))
readSTRef :: STRef s a -> ST s a
readSTRef ref =
Strict.unsafeIOToST (IORef.readIORef (unSTRef ref))
writeSTRef :: STRef s a -> a -> ST s ()
writeSTRef ref a =
Strict.unsafeIOToST (IORef.writeIORef (unSTRef ref) a)
modifySTRef :: STRef s a -> (a -> a) -> ST s ()
modifySTRef ref f =
Strict.unsafeIOToST (IORef.modifyIORef (unSTRef ref) f)