С одной стороны, в 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