module MonadVar.Instances.IORef where
import MonadVar.Prelude
import MonadVar.Classes
import MonadVar.Default
import Data.IORef
instance MonadIO m => MonadNew m IORef where
new = liftIO . newIORef
instance MonadIO m => MonadRead m IORef where
read = liftIO . readIORef
instance MonadIO m => MonadWrite m IORef where
write = liftIO .* writeIORef
instance MonadIO m => MonadSwap m IORef where
swap = liftIO .* defaultReadWriteSwap
instance MonadIO m => MonadMutate_ m IORef where
mutate_ = liftIO .* defaultReadWriteMutate_
instance MonadIO m => MonadMutate m IORef where
mutate = liftIO .* defaultReadWriteMutate
instance IO ~ io => MonadMutateM_ io IO IORef where
mutateM_ = defaultReadWriteMutateM_
instance IO ~ io => MonadMutateM io IO IORef where
mutateM = defaultReadWriteMutateM