我现在多次遇到的一种模式是,需要通过在其上映射一些测试并查看是否通过任何或所有元素来检查值列表。典型的解决方案是使用方便的内置函数all和any.
问题是这些评估是串行的。在许多情况下,这将是多快平行的过程被完整的评估,一旦任何线程发现一个“假”的all或“真”的any。我很确定不能使用 Control.Parallel 实现短路行为,因为它需要进程间通信,而且我还没有理解足够接近 Control.Concurrent 的任何地方来实现它。
这是数学中非常常见的模式(例如 Miller-Rabin Primality),所以我觉得有人可能已经为此提出了解决方案,但出于显而易见的原因,在 google 上搜索“parallel or/and/any/all on list” haskell" 不会返回许多相关结果。