Skip to content

Commit c2c4692

Browse files
natefaubionpaf31
authored andcommitted
Add parOneOf (#18)
* Add parOneOf * Add parOneOfMap, use Alternative, add comments * Use oneOfMap in parOneOfMap * More oneOfMap
1 parent bbbf112 commit c2c4692

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"dependencies": {
1919
"purescript-transformers": "^3.0.0",
2020
"purescript-refs": "^3.0.0",
21-
"purescript-functors": "^2.0.0"
21+
"purescript-functors": "^2.0.0",
22+
"purescript-foldable-traversable": "^3.6.0"
2223
},
2324
"devDependencies": {
2425
"purescript-console": "^3.0.0",

src/Control/Parallel.purs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ module Control.Parallel
33
, parTraverse_
44
, parSequence
55
, parSequence_
6+
, parOneOf
67
, module Control.Parallel.Class
78
) where
89

910
import Prelude
1011

12+
import Control.Alternative (class Alternative)
1113
import Control.Parallel.Class (class Parallel, parallel, sequential, ParCont(..))
1214

13-
import Data.Foldable (class Foldable, traverse_)
15+
import Data.Foldable (class Foldable, traverse_, oneOfMap)
1416
import Data.Traversable (class Traversable, traverse)
1517

1618
-- | Traverse a collection in parallel.
@@ -48,3 +50,26 @@ parSequence_
4850
=> t (m a)
4951
-> m Unit
5052
parSequence_ = parTraverse_ id
53+
54+
-- | Race a collection in parallel.
55+
parOneOf
56+
:: forall a t m f
57+
. Parallel f m
58+
=> Alternative f
59+
=> Foldable t
60+
=> Functor t
61+
=> t (m a)
62+
-> m a
63+
parOneOf = sequential <<< oneOfMap parallel
64+
65+
-- | Race a collection in parallel while mapping to some effect.
66+
parOneOfMap
67+
:: forall a b t m f
68+
. Parallel f m
69+
=> Alternative f
70+
=> Foldable t
71+
=> Functor t
72+
=> (a -> m b)
73+
-> t a
74+
-> m b
75+
parOneOfMap f = sequential <<< oneOfMap (parallel <<< f)

0 commit comments

Comments
 (0)