polysemy-conc-0.13.0.1: Polysemy effects for concurrency
Safe HaskellSafe-Inferred
LanguageGHC2021

Polysemy.Conc.Queue

Description

 
Synopsis

Documentation

readMaybe :: Member (Queue d) r => Sem r (Maybe d) Source #

Read from a Queue and convert the result to Maybe, returning Nothing if the queue has been closed, and blocking until an element is available.

loop :: Member (Queue d) r => (d -> Sem r ()) -> Sem r () Source #

Read from a Queue repeatedly until it is closed.

When an element is received, call action and recurse.

loopOr :: Member (Queue d) r => Sem r Bool -> (d -> Sem r Bool) -> Sem r () Source #

Read from a Queue repeatedly until it is closed.

When an element is received, call action and recurse if it returns True. When no element is available, evaluate na and recurse if it returns True.

tryReadMaybe :: Member (Queue d) r => Sem r (Maybe d) Source #

Read from a Queue and convert the result to Maybe, returning Nothing if there is no element available or the queue has been closed.

data Queue d :: Effect Source #

Abstracts queues like TBQueue.

For documentation on the constructors, see the module Polysemy.Conc.Data.Queue.

import Polysemy.Conc (Queue, QueueResult)
import Polysemy.Conc.Effect.Queue as Queue

prog :: Member (Queue Int) r => Sem r (QueueResult Int)
prog = do
  Queue.write 5
  Queue.write 10
  Queue.read >>= \case
    QueueResult.Success i -> fmap (i +) <$> Queue.read
    r -> pure r

read :: forall d r. Member (Queue d) r => Sem r (QueueResult d) Source #

Read an element from the queue, blocking until one is available.

peek :: forall d r. Member (Queue d) r => Sem r (QueueResult d) Source #

Read an element, leaving it in the queue, blocking until one is available.

close :: forall d r. Member (Queue d) r => Sem r () Source #

Close the queue.

write :: forall d r. Member (Queue d) r => d -> Sem r () Source #

Write an element to the queue, blocking until a slot is available.

tryRead :: forall d r. Member (Queue d) r => Sem r (QueueResult d) Source #

Read an element from the queue, immediately returning if none is available.

closed :: forall d r. Member (Queue d) r => Sem r Bool Source #

Indicate whether the queue is closed.

readTimeout :: forall d r t. (Member (Queue d) r, TimeUnit t) => t -> Sem r (QueueResult d) Source #

Read an element from the queue, blocking until one is available or the timeout expires.

tryPeek :: forall d r. Member (Queue d) r => Sem r (QueueResult d) Source #

Read an element, leaving it in the queue, immediately returning if none is available.

tryWrite :: forall d r. Member (Queue d) r => d -> Sem r (QueueResult ()) Source #

Write an element to the queue, immediately returning if no slot is available.

writeTimeout :: forall d r t. (Member (Queue d) r, TimeUnit t) => t -> d -> Sem r (QueueResult ()) Source #

Write an element to the queue, blocking until a slot is available or the timeout expires.