{-# 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 :: forall a. Default a => STM (TVar a) newDefaultTVar = a -> STM (TVar a) forall a. a -> STM (TVar a) newTVar a forall a. Default a => a def readModifyTVar :: TVar a -> (a -> a) -> STM a readModifyTVar :: forall a. TVar a -> (a -> a) -> STM a readModifyTVar TVar a v a -> a f = TVar a -> STM a forall a. TVar a -> STM a readTVar TVar a v STM a -> STM () -> STM a forall a b. STM a -> STM b -> STM a forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a <* TVar a -> (a -> a) -> STM () forall a. TVar a -> (a -> a) -> STM () modifyTVar TVar a v a -> a f checkFlag :: TVar Bool -> STM Bool checkFlag :: TVar Bool -> STM Bool checkFlag TVar Bool flg = TVar Bool -> STM Bool forall a. TVar a -> STM a readTVar TVar Bool flg STM Bool -> (Bool -> STM Bool) -> STM Bool forall a b. STM a -> (a -> STM b) -> STM b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= STM Bool -> STM Bool -> Bool -> STM Bool forall a. a -> a -> Bool -> a bool (Bool -> STM Bool forall a. a -> STM a forall (f :: * -> *) a. Applicative f => a -> f a pure Bool False) (Bool True Bool -> STM () -> STM Bool forall a b. a -> STM b -> STM a forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ TVar Bool -> Bool -> STM () forall a. TVar a -> a -> STM () writeTVar TVar Bool flg Bool False)