haskell中的并行hashmap

Ser*_*nin 5 parallel-processing haskell

还有的实现HashMap,在Haskell,但我无法找到它的水货版本.有必要解决下面的问题.

说,我有两个哈希图HashMap a b,我想将它与条件结合起来,现在我使用unionWith函数,但问题是我的a密钥的等价是非常长的过程(它是一个图形).所以我想并行执行它.我该怎么做?

cdk*_*cdk 1

您可以创建一个newtypearound HashMap,然后定义一个Eq与您喜欢使用的并行的新实例Control.Parallel。不幸的是,您必须自己编写所有代码,我认为没有任何开箱即用的并行实现。

import Control.Parallel

newtype ParHashMap k v = ParHashMap { unPar :: HashMap k v }

instance (Eq k, Eq v) => Eq (ParHashMap k v) where
    ParHashMap hm1 == ParHashMap hm2 = ...
Run Code Online (Sandbox Code Playgroud)

我不确定HashMap你正在使用哪个(我推荐unordered-containers),所以我无法编写Eq实例,但并行评估每个节点的相等性应该相当简单。