module MonadVar.Instances.STRef where
import MonadVar.Classes
import MonadVar.Default
import Control.Monad.ST
import Data.STRef
instance MonadNew (ST s) (STRef s) where
new = newSTRef
instance MonadRead (ST s) (STRef s) where
read = readSTRef
instance MonadWrite (ST s) (STRef s) where
write = writeSTRef
instance MonadSwap (ST s) (STRef s) where
swap = defaultReadWriteSwap
instance MonadMutate_ (ST s) (STRef s) where
mutate_ = defaultReadWriteMutate_
instance MonadMutate (ST s) (STRef s) where
mutate = defaultReadWriteMutate
instance ST s ~ st_s => MonadMutateM_ st_s (ST s) (STRef s) where
mutateM_ = defaultReadWriteMutateM_
instance ST s ~ st_s => MonadMutateM st_s (ST s) (STRef s) where
mutateM = defaultReadWriteMutateM