-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Tiny library for concurrent computations
--
-- Spawn a concurrent IO computation and later demand its result.
-- Tiny API and implementation.
--
-- New in version 0.3:
--
--
-- - Added functions parMapIO, parMapIO_, and
-- (|*|), which capture common use cases of spawn.
-- - Updated code to avoid using deprecated functions with
-- base-4.3 and later (GHC 7.0 and later). The old code is still
-- used with older base libraries.
-- - Added public GitHub repository.
--
@package spawn
@version 0.3
module Control.Concurrent.Spawn
-- | Spawn a concurrent computation. Produces an action which demands the
-- result. Any exception from the original computation is re-thrown when
-- and where the result is demanded.
spawn :: IO a -> IO (IO a)
-- | Two ways a computation of type IO a can end.
type Result a = Either SomeException a
-- | Spawn a concurrent computation. Produces an action which demands a
-- Result.
spawnTry :: IO a -> IO (IO (Result a))
-- | Execute a separate thread of IO for each element of a list, and
-- collect results.
--
-- The analogy to parMap is misleading. The concurrent execution
-- of these actions is non-deterministic and can affect results. However,
-- parMapIO is expected to be most useful for actions
-- which do not interact.
parMapIO :: (a -> IO b) -> [a] -> IO [b]
-- | Execute a separate thread of IO for each element of a list.
--
-- Results are discarded, but the parMapIO_ action does
-- not complete until all threads have finished.
parMapIO_ :: (a -> IO b) -> [a] -> IO ()
-- | A concurrent version of ap or (<*>) for
-- IO.
--
-- Spawns a thread for the right-hand action, while executing the
-- left-hand action in the current thread.
(|*|) :: IO (a -> b) -> IO a -> IO b
-- | Given n, produces a function to wrap IO
-- actions. No more than n wrapped actions will be in progress at
-- one time.
pool :: Int -> IO (IO a -> IO a)