packages feed

lsp-client-0.4.0.0: src/Control/Concurrent/STM/TVar/Extra.hs

module Control.Concurrent.STM.TVar.Extra where

import Control.Concurrent.STM
import Prelude

overTVar :: (a -> a) -> TVar a -> STM a
overTVar f var = stateTVar var $ \x -> let y = f x in (y, y)

overTVarIO :: (a -> a) -> TVar a -> IO a
overTVarIO = (atomically .) . overTVar

modifyTVarIO :: TVar a -> (a -> a) -> IO ()
modifyTVarIO = (atomically .) . modifyTVar

writeTVarIO :: TVar a -> a -> IO ()
writeTVarIO = (atomically .) . writeTVar