2013-10-29 22 views
5

Có một triển khai thực hiện HashMap, trong Haskell, nhưng tôi không thể tìm thấy phiên bản song song của nó. Nó là cần thiết để giải quyết vấn đề dưới đây.Hình băm song song trong haskell

Nói, tôi có hai hashmaps HashMap a b, tôi muốn kết hợp nó với điều kiện, Bây giờ tôi sử dụng unionWith chức năng, nhưng vấn đề là tương đương của a chìa khóa của tôi là quy trình rất dài (đó là một đồ thị). Vì vậy, tôi muốn thực hiện nó song song. Tôi làm nó như thế nào?

Trả lời

1

Bạn có thể tạo newtype xung quanh HashMap, sau đó xác định trường hợp Eq mới song song với mức bạn muốn sử dụng Control.Parallel. Thật không may, bạn sẽ phải tự viết tất cả mã đó, tôi không nghĩ có bất kỳ sự triển khai song song nào của hộp.

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 = ... 

Tôi không chắc chắn mà HashMap bạn đang sử dụng (tôi khuyên bạn nên unordered-containers), vì vậy tôi không thể viết sơ thẩm Eq, nhưng nó phải là khá đơn giản để đánh giá bình đẳng của mỗi nút song song.

Các vấn đề liên quan