polysemy-conc-0.1.0.1: lib/Polysemy/Conc.hs
-- |Description: Polysemy Effects for Concurrency
module Polysemy.Conc (
-- * Introduction
-- $intro
-- * Queues
-- $queue
Queue,
QueueResult,
resultToMaybe,
-- ** Interpreters
interpretQueueTBM,
interpretQueueTB,
interpretQueueListReadOnlyAtomic,
interpretQueueListReadOnlyAtomicWith,
interpretQueueListReadOnlyState,
interpretQueueListReadOnlyStateWith,
-- * MVars
-- $mvar
Sync,
-- ** Interpreters
interpretSync,
-- * Racing
-- $race
Race,
race,
race_,
timeout,
timeout_,
-- ** Interpreters
interpretRace,
-- * Signal Handling
-- $signal
Interrupt,
-- ** Interpreters
interpretInterrupt,
) where
import Polysemy.Conc.Data.Interrupt (Interrupt)
import Polysemy.Conc.Data.Queue (Queue)
import Polysemy.Conc.Data.QueueResult (QueueResult)
import Polysemy.Conc.Data.Race (Race, race, timeout)
import Polysemy.Conc.Data.Sync (Sync)
import Polysemy.Conc.Interrupt (interpretInterrupt)
import Polysemy.Conc.Queue (
interpretQueueListReadOnlyAtomic,
interpretQueueListReadOnlyAtomicWith,
interpretQueueListReadOnlyState,
interpretQueueListReadOnlyStateWith,
)
import Polysemy.Conc.Queue.Result (resultToMaybe)
import Polysemy.Conc.Queue.TB (interpretQueueTB)
import Polysemy.Conc.Queue.TBM (interpretQueueTBM)
import Polysemy.Conc.Race (interpretRace, race_, timeout_)
import Polysemy.Conc.Sync (interpretSync)
-- $intro
-- This library provides an assortment of tools for concurrency-related tasks:
--
-- - [STM queues](#queue)
-- - [MVars](#mvar)
-- - [Racing](#race)
-- - [Signal handling](#signal)
-- $queue
-- #queue#
-- $mvar
-- #mvar#
-- An 'MVar' is abstracted as 'Sync' since it can be used to synchronize threads.
-- $race
-- #race#
-- Racing works like this:
--
-- @
-- prog =
-- Polysemy.Conc.race (httpRequest "hackage.haskell.org") (readFile "\/path\/to\/file") >>= \\case
-- Left _ -> putStrLn "hackage was faster"
-- Right _ -> putStrLn "file was faster"
-- @
--
-- When the first thunk finishes, the other will be killed.
-- $signal
-- #signal#