распаковка, (разреженные) матрицы и библиотека векторов haskell

Я хотел бы эффективно манипулировать матрицами (полными или разреженными) с векторной библиотекой haskell.

Вот тип матрицы

import qualified Data.Vector.Unboxed as U
import qualified Data.Vector as V

data Link a = Full (V.Vector (U.Vector a))
    | Sparse (V.Vector (U.Vector (Int,a)))

type Vector a = U.Vector a

Как видите, матрица - это вектор неупакованных векторов. Теперь я хотел бы сделать точечное произведение между вектором и матрицей. Это довольно просто сделать, комбинируя сумму, почтовый индекс и карту.

Но если я сделаю это, поскольку я отображаю строки матрицы, результатом будет вектор в штучной упаковке, даже если он может быть распакован.

propagateS output (Field src) (Full weights) = V.map (sum out) weights
    where out     = U.map output src
          sum s w = U.sum $ zipWithFull (*) w s

propagateS output (Field src) (Sparse weights) = V.map (sum out) weights
    where out     = U.map output src
          sum s w = U.sum $ zipWithSparse (*) w s

zipWithFull = U.zipWith

zipWithSparse f x y = U.map f' x
    where f' (i,v) = f v (y U.! i)

Как эффективно получить распакованный вектор в результате?

Ответы на вопрос(1)

Ваш ответ на вопрос