module IHP.Job.Queue.STM ( tryWriteTBQueue ) where import IHP.Prelude import Control.Concurrent.STM (TBQueue, writeTBQueue, STM) import Control.Concurrent.STM.TBQueue (isFullTBQueue) -- | Non-blocking write to a TBQueue. Returns True if the value was written, -- False if the queue was full. tryWriteTBQueue :: TBQueue a -> a -> STM Bool tryWriteTBQueue :: forall a. TBQueue a -> a -> STM Bool tryWriteTBQueue TBQueue a queue a value = do full <- TBQueue a -> STM Bool forall a. TBQueue a -> STM Bool isFullTBQueue TBQueue a queue if full then pure False else do writeTBQueue queue value pure True