packages feed

tools-yj-0.1.0.19: src/Control/Concurrent/STM/ToolsYj.hs

{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Control.Concurrent.STM.ToolsYj (newDefaultTVar, readModifyTVar, checkFlag) where

import Control.Concurrent.STM
import Data.Default
import Data.Bool

newDefaultTVar :: Default a => STM (TVar a)
newDefaultTVar = newTVar def

readModifyTVar :: TVar a -> (a -> a) -> STM a
readModifyTVar v f = readTVar v <* modifyTVar v f

checkFlag :: TVar Bool -> STM Bool
checkFlag flg = readTVar flg >>= bool (pure False) (True <$ writeTVar flg False)