我希望使用Data.Vector.Generic.Mutable.new创建一个可变向量。我找到了通过解冻纯矢量来创建可变矢量的例子,但这不是我想要做的。
以下是许多尝试失败的尝试之一:
import Control.Monad.Primitive
import qualified Data.Vector.Generic.Mutable as GM
main = do
v <- (GM.new 10) :: (GM.MVector v a) => IO (v RealWorld a)
GM.write v 0 (3::Int)
x <- GM.read v 0
putStrLn $ show x
给我错误
No instance for (GM.MVector v0 Int)
arising from an expression type signature
Possible fix: add an instance declaration for (GM.MVector v0 Int)
我尝试了基于Haskell Vector教程的变体而没有运气。
我也欢迎有关构建载体的更清洁方法的建议。对RealWorld的引用对我来说似乎很难看。
答案 0 :(得分:4)
GM.MVector v a
中的v
constaint是不明显的。{1}}。换句话说,根据您提供GHC的类型信息,它仍然无法确定您希望它使用的GM.MVector
的具体实例。对于Int
使用Data.Vector.Unboxed.Mutable
的可变向量。
import qualified Data.Vector.Unboxed.Mutable as M
main = do
v <- M.new 10
M.write v 0 (3 :: Int)
x <- M.read v 0
print x
答案 1 :(得分:2)
我认为问题是你必须给v
一个具体类型 - 就像这样:
import Control.Monad.Primitive
import qualified Data.Vector.Mutable as V
import qualified Data.Vector.Generic.Mutable as GM
main = do
v <- GM.new 10 :: IO (V.MVector RealWorld Int)
GM.write v 0 (3::Int)
x <- GM.read v 0
putStrLn $ show x