-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Multithreaded evaluation using Arrows.
--
-- Arrows are a suitable abstraction for parallel programming. This
-- package offers a general interface for parallelizing Arrows. This
-- package however only contains the interface and code written against
-- it must be used with a backend such as
-- Parallel-Arrows-Multicore, Parallel-Arrows-ParMonad,
-- Parallel-Arrows-Eden in order to have any parallel speedup.
-- This package also contains some parallel skeletons such as variants of
-- parMap and some topology skeletons. For more info see check out the
-- paper at https://arxiv.org/abs/1801.02216
@package Parallel-Arrows-Definition
@version 0.1.1.0
module Parrows.Util
zipWithArr :: ArrowChoice arr => arr (a, b) c -> arr ([a], [b]) [c]
evalN :: (ArrowChoice arr) => [arr a b] -> arr [a] [b]
mapArr :: ArrowChoice arr => arr a b -> arr [a] [b]
foldlArr :: (ArrowChoice arr) => arr (b, a) b -> arr (b, [a]) b
rightRotate :: (Arrow arr) => arr [a] [a]
assoc :: ((a, b), c) -> (a, (b, c))
unassoc :: (a, (b, c)) -> ((a, b), c)
unshuffle :: (Arrow arr) => Int -> arr [a] [[a]]
takeEach :: Int -> [a] -> [a]
-- | Simple shuffling - inverse to round robin distribution
shuffle :: (Arrow arr) => arr [[a]] [a]
-- | A lazy list is an infinite stream
lazy :: (Arrow arr) => arr [a] [a]
module Parrows.Definition
type NumCores = Int
type ChunkSize = Int
class (Arrow arr) => ArrowParallel arr a b conf
parEvalN :: ArrowParallel arr a b conf => conf -> [arr a b] -> arr [a] [b]
class ArrowParallel arr a b conf => ArrowLoopParallel arr a b conf
loopParEvalN :: ArrowLoopParallel arr a b conf => conf -> [arr a b] -> arr [a] [b]
postLoopParEvalN :: ArrowLoopParallel arr a b conf => conf -> [arr a b] -> arr [a] [b]
(|***|) :: (ArrowChoice arr, ArrowParallel arr (Either a c) (Either b d) ()) => arr a b -> arr c d -> arr (a, c) (b, d)
(|&&&|) :: (ArrowChoice arr, ArrowParallel arr (Either a a) (Either b c) ()) => arr a b -> arr a c -> arr a (b, c)
(...) :: (Arrow arr) => [arr a b] -> arr b c -> [arr a c]
parEvalNLazy :: (ArrowParallel arr a b conf, ArrowChoice arr) => conf -> ChunkSize -> [arr a b] -> arr [a] [b]
parEval2 :: (ArrowChoice arr, ArrowParallel arr (Either a c) (Either b d) conf) => conf -> arr a b -> arr c d -> arr (a, c) (b, d)
module Parrows.Skeletons.Map
parMap :: (ArrowParallel arr a b conf) => conf -> arr a b -> arr [a] [b]
parMapStream :: (ArrowParallel arr a b conf, ArrowChoice arr) => conf -> ChunkSize -> arr a b -> arr [a] [b]
farm :: (ArrowParallel arr a b conf, ArrowParallel arr [a] [b] conf, ArrowChoice arr) => conf -> NumCores -> arr a b -> arr [a] [b]
farmChunk :: (ArrowParallel arr a b conf, ArrowParallel arr [a] [b] conf, ArrowChoice arr) => conf -> ChunkSize -> NumCores -> arr a b -> arr [a] [b]
parMapReduceDirect :: (ArrowParallel arr (b, [a]) b conf, ArrowChoice arr) => conf -> ChunkSize -> arr a b -> arr (b, b) b -> arr (b, [a]) b
module Parrows.Future
class Future fut a conf | a conf -> fut
put :: (Future fut a conf, (Arrow arr)) => conf -> arr a (fut a)
get :: (Future fut a conf, (Arrow arr)) => conf -> arr (fut a) a
data BasicFuture a
BF :: a -> BasicFuture a
put' :: (Arrow arr) => arr a (BasicFuture a)
get' :: (Arrow arr) => arr (BasicFuture a) a
liftFut :: (Arrow arr, Future fut a conf, Future fut b conf) => conf -> arr a b -> arr (fut a) (fut b)
unliftFut :: (Arrow arr, Future fut a conf, Future fut b conf) => conf -> arr (fut a) (fut b) -> arr a b
parEvalNFut :: (ArrowParallel arr (fut a) (fut b) conf, Future fut a conf, Future fut b conf) => conf -> [arr a b] -> arr [fut a] [fut b]
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Parrows.Future.BasicFuture a)
module Parrows.Skeletons.Topology
(|>>>|) :: (ArrowLoop arr, ArrowChoice arr, ArrowLoopParallel arr (fut (([a], [b]), [c])) (fut (([a], [b]), [c])) (), Future fut (([a], [b]), [c]) ()) => arr a b -> arr b c -> arr a c
pipe2 :: (ArrowLoop arr, ArrowChoice arr, ArrowLoopParallel arr (fut (([a], [b]), [c])) (fut (([a], [b]), [c])) conf, Future fut (([a], [b]), [c]) conf) => conf -> arr a b -> arr b c -> arr a c
pipe :: (ArrowLoop arr, ArrowLoopParallel arr (fut a) (fut a) conf, Future fut a conf) => conf -> [arr a a] -> arr a a
pipeSimple :: (ArrowLoop arr, ArrowLoopParallel arr a a conf) => conf -> [arr a a] -> arr a a
ring :: (Future fut r conf, ArrowLoop arr, ArrowLoopParallel arr (i, fut r) (o, fut r) conf, ArrowLoopParallel arr o o conf) => conf -> arr (i, r) (o, r) -> arr [i] [o]
torus :: (Future fut a conf, Future fut b conf, ArrowLoop arr, ArrowChoice arr, ArrowLoopParallel arr (c, fut a, fut b) (d, fut a, fut b) conf, ArrowLoopParallel arr [d] [d] conf) => conf -> arr (c, a, b) (d, a, b) -> arr [[c]] [[d]]
uncurry3 :: (a -> b -> c -> d) -> (a, (b, c)) -> d
lazyzip3 :: [a] -> [b] -> [c] -> [(a, b, c)]
ptorus :: (Arrow arr, Future fut a conf, Future fut b conf) => conf -> arr (c, a, b) (d, a, b) -> arr (c, fut a, fut b) (d, fut a, fut b)
threetotwo :: (Arrow arr) => arr (a, b, c) (a, (b, c))
twotothree :: (Arrow arr) => arr (a, (b, c)) (a, b, c)
module Parrows.Dummy
type Strategy a = a -> a
data Conf a
Conf :: (Strategy a) -> Conf a
defaultConf :: (NFData b) => [arr a b] -> Conf b
stratToConf :: [arr a b] -> Strategy b -> Conf b
instance Control.Arrow.ArrowChoice arr => Parrows.Definition.ArrowParallel arr a b (Parrows.Dummy.Conf b)
instance (Control.Arrow.ArrowChoice arr, Parrows.Definition.ArrowParallel arr a b (Parrows.Dummy.Conf b)) => Parrows.Definition.ArrowLoopParallel arr a b (Parrows.Dummy.Conf b)
instance Parrows.Future.Future Parrows.Future.BasicFuture a (Parrows.Dummy.Conf a)
module Parrows.Dummy.Simple
instance (Control.DeepSeq.NFData b, Control.Arrow.ArrowChoice arr, Parrows.Definition.ArrowParallel arr a b (Parrows.Dummy.Conf b)) => Parrows.Definition.ArrowParallel arr a b ()
instance (Control.DeepSeq.NFData b, Control.Arrow.ArrowChoice arr, Parrows.Definition.ArrowParallel arr a b (), Parrows.Definition.ArrowLoopParallel arr a b (Parrows.Dummy.Conf b)) => Parrows.Definition.ArrowLoopParallel arr a b ()
instance Parrows.Future.Future Parrows.Future.BasicFuture b ()