Я пытался часами, но, похоже, не могу его скомпилировать. Я пытаюсь выполнить простую операцию параллельно с изменяемым вектором, но я получаю ошибки компиляции.Использование par monad (parMapM) на изменяемом векторе
import qualified Data.Vector as V
import qualified Data.Vector.Mutable as M
import Control.Monad.Par as Par
import Control.Monad
a = V.fromList [1,2,3,4,5,6]
b = do
c <- V.unsafeThaw a
runPar $ parMapM
(liftM (\i -> M.write c i 100))
[0..5]
return $ V.unsafeFreeze c
На линии "с < - V.unsafeThaw" Я получаю ошибку компиляции
Couldn't match type `primitive-0.5.2.1:Control.Monad.Primitive.PrimState []' with `primitive-0.5.2.1:Control.Monad.Primitive.PrimState m0' NB: `primitive-0.5.2.1:Control.Monad.Primitive.PrimState' is a type function, and may not be injective The type variable `m0' is ambiguous Expected type: [M.MVector (primitive-0.5.2.1:Control.Monad.Primitive.PrimState m0) Integer] Actual type: [M.MVector (primitive-0.5.2.1:Control.Monad.Primitive.PrimState []) Integer] In a stmt of a 'do' block: c <- V.unsafeThaw a In the expression: do { c <- V.unsafeThaw a; runPar $ parMapM (liftM (\ i -> M.write c i 100)) [0 .. 5]; return $ V.unsafeFreeze c }
На линии "возвращение $ V.unsafeFreeze с" Я получаю ошибку
Couldn't match type `primitive-0.5.2.1:Control.Monad.Primitive.PrimState m1' with `primitive-0.5.2.1:Control.Monad.Primitive.PrimState m0' NB: `primitive-0.5.2.1:Control.Monad.Primitive.PrimState' is a type function, and may not be injective The type variables `m0', `m1' are ambiguous Expected type: M.MVector (primitive-0.5.2.1:Control.Monad.Primitive.PrimState m1) Integer Actual type: M.MVector (primitive-0.5.2.1:Control.Monad.Primitive.PrimState m0) Integer Relevant bindings include c :: M.MVector (primitive-0.5.2.1:Control.Monad.Primitive.PrimState m0) Integer (bound at C:\Users\Administrator\workspace\test\src\Main.hs:11:5) b :: [m1 (V.Vector Integer)] (bound at C:\Users\Administrator\workspace\test\src\Main.hs:10:1) In the first argument of `V.unsafeFreeze', namely `c' In the second argument of `($)', namely `V.unsafeFreeze c'
Не могли бы вы помочь мне узнать, что я делаю неправильно?
Спасибо, что это именно то, что мне нужно. – HaskellEnthusiast
Что плохого в 'ST'? – dfeuer