module MonadVar.Instances.TVar where
import MonadVar.Prelude
import MonadVar.Classes
import MonadVar.Default
import Control.Concurrent.STM
instance MonadNew STM TVar where
new = newTVar
instance MonadRead STM TVar where
read = readTVar
instance MonadWrite STM TVar where
write = writeTVar
instance MonadSwap STM TVar where
swap = defaultReadWriteSwap
instance MonadMutate_ STM TVar where
mutate_ = defaultReadWriteMutate_
instance MonadMutate STM TVar where
mutate = defaultReadWriteMutate
instance STM ~ stm => MonadMutateM_ stm STM TVar where
mutateM_ = defaultReadWriteMutateM_
instance STM ~ stm => MonadMutateM stm STM TVar where
mutateM = defaultReadWriteMutateM
instance MonadNew IO TVar where
new = newTVarIO
instance MonadRead IO TVar where
read = readTVarIO
instance MonadWrite IO TVar where
write = atomically .* writeTVar
instance MonadSwap IO TVar where
swap = atomically .* swap