packages feed

ihp-1.5.0: IHP/Job/Queue/STM.hs

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 queue value = do
    full <- isFullTBQueue queue
    if full
        then pure False
        else do
            writeTBQueue queue value
            pure True