Как писать параллельный код с векторами Haskell?

С одной стороны, в Haskell Vector a кажется предпочтительным типом для использования в качестве массива чисел. Существует даже (неполный) Vector Tutorial .

С другой стороны, Control.Parallel.Strategies определены в основном в терминах Traversable . Векторная библиотека таких экземпляров не предоставляет.

Минимальное полное определение Traversable t должно также определять Foldable и

traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
sequenceA :: Applicative f => t (f a) -> f (t a)

Я не понимаю, как sequenceA можно определить для Data.Vector.Unboxed.Vector . Итак, как лучше всего писать параллельный код с распакованными векторами? Определение некоторых новых специальных стратегий, таких как evalVector или использование par и pseq явным образом, или использование простого Data.Array вместо векторов?

] PS Plain Массивы без проблем распараллеливаются: https://gist.github.com/701888

8
задан sastanin 17 November 2010 в 10:21
поделиться