-- 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 ()