当我尝试编译这个时:
module Main where
import qualified Data.Vector.Unboxed.Mutable as MV
import Control.Monad.ST
myRead mv = runST $ MV.read mv 0
我收到以下错误消息:
Could not deduce (t ~ U.MVector s a)
from the context (U.Unbox a)
bound by the inferred type of myRead :: U.Unbox a => t -> a
at src/Main.hs:53:1-32
`t' is a rigid type variable bound by
the inferred type of myRead :: U.Unbox a => t -> a
at src/Main.hs:53:1
Expected type: U.MVector (PrimState (ST s)) a
Actual type: t
In the first argument of `MV.read', namely `mv'
In the second argument of `($)', namely `MV.read mv 0'
In the expression: runST $ MV.read mv 0
我可以使用 runST 从纯可变向量中读取吗?如果是这样,怎么做?我认为它需要一个类型签名myRead
,但我尝试过的一切都导致了越来越多的难以理解的错误消息。
编辑:突出显示我刚刚在下面发表评论的一些上下文:这里的上下文是我有一个函数,它接收一个可变向量,使用可变向量作为临时暂存空间进行一些计算,然后需要返回一个浮点值。因为我不关心可变向量的变化,所以我想知道是否有一种方法可以忽略它的“状态变化”并简单地从其中返回一个值。