Haskell中的并行monad地图?像parMapM这样的东西?

scr*_*avy 11 parallel-processing monads haskell state-monad

我正在寻找一种在ST-Monad中并行运行两个计算的方法.我正在构建一个相当大的数组(使用STUArray),我想并行执行.

到目前为止,我已经在stackoverflow上找到了这个这个 Q&A,但是第一个不适用于我的情况,因为它只处理纯代码而第二个处理IO monad - 但我处于State Thread中.

我也找到了monad-parallel包,但它要求我为ST设置一个'MonadParallel'实例.另外,单子面值包中只支持纯计算或IO单子.

有没有办法在ST内进行并行monadic计算?

Nik*_*kov 7

首先,你的问题只有两个字:parallel和array - 我必须建议你去看看repa.另外你应该查看Data Parallel Haskell,因为它有望成为Haskell之路的下一个重要里程碑,并且有一些伟大的人参与了这个项目.

关于你的具体问题,也有能够做的正是你问什么,只是一个库IO单子,已命名的单子平行异步mapConcurrently.你有没有考虑过stToIO进入IO

还有一个提升异步库,它扩展了标准版本MonadBaseControl,它有一个实例ST,所以你可以使用它的版本mapConcurrently或者至少使用它作为实现你自己的灵感.