module MonadVar.Instances.TMVar where
import MonadVar.Prelude
import MonadVar.Classes
import MonadVar.Default
import Control.Concurrent.STM
instance MonadNew STM TMVar where
new = newTMVar
instance MonadLock STM TMVar where
hold = takeTMVar
fill = putTMVar
tryHold = tryTakeTMVar
tryFill = tryPutTMVar
tryRead = tryReadTMVar
newEmpty = newEmptyTMVar
isEmpty = isEmptyTMVar
instance MonadRead STM TMVar where
read = readTMVar
instance MonadWrite STM TMVar where
write = defaultLockUnsafeWrite
instance MonadSwap STM TMVar where
swap = defaultLockUnsafeSwap
instance MonadMutate_ STM TMVar where
mutate_ = defaultLockUnsafeMutate_
instance MonadMutate STM TMVar where
mutate = defaultLockUnsafeMutate
instance STM ~ stm => MonadMutateM_ stm STM TMVar where
mutateM_ = defaultLockUnsafeMutateM_
instance STM ~ stm => MonadMutateM stm STM TMVar where
mutateM = defaultLockUnsafeMutateM
instance MonadNew IO TMVar where
new = newTMVarIO
instance MonadLock IO TMVar where
hold = atomically . hold
fill = atomically .* fill
tryHold = atomically . tryHold
tryFill = atomically .* tryFill
tryRead = atomically . tryRead
newEmpty = newEmptyTMVarIO
isEmpty = atomically . isEmpty
instance MonadRead IO TMVar where
read = atomically . read
instance MonadWrite IO TMVar where
write = atomically .* write
instance MonadSwap IO TMVar where
swap = atomically .* swap
instance MonadMutate_ IO TMVar where
mutate_ = atomically .* mutate_
instance MonadMutate IO TMVar where
mutate = atomically .* mutate
instance MonadMutateM_ STM IO TMVar where
mutateM_ = atomically .* mutateM_
instance MonadMutateM STM IO TMVar where
mutateM = atomically .* mutateM
instance MonadMutateM_ IO IO TMVar where
mutateM_ = defaultLockIOMutateM_
instance MonadMutateM IO IO TMVar where
mutateM = defaultLockIOMutateM