Haskell 尝试生成随机数时向量的实例错误

Haskell 尝试生成随机数时向量的实例错误,haskell,vector,Haskell,Vector,我正在尝试使用System.MWC包生成随机数。我编写了一个小测试代码,如下所示: module Main where import Data.Word(Word32) import Control.Monad.ST as ST import System.Random.MWC import Data.Vector.Generic.Base import qualified Data.Vector.Unboxed as U test :: Word32 -> Int test x = r

我正在尝试使用
System.MWC
包生成随机数。我编写了一个小测试代码,如下所示:

module Main where
import Data.Word(Word32)
import Control.Monad.ST as ST
import System.Random.MWC
import Data.Vector.Generic.Base
import qualified Data.Vector.Unboxed as U

test :: Word32 -> Int
test x = runST $ do
      gen <- initialize (U.fromList [x] :: U.Vector Word32)
      v <- uniformR (1,100) gen
      return v
我在
ghci
中运行
info
,确认没有为
Data.Vector.Generic.Base.Vector
定义实例。然后我检查了
hackage
,查看文档,但该包没有页面


所以,我的问题是,缺失的实例定义在哪里。一旦我知道它的定义位置,我就可以加载它。导入
Data.Vector.Generic.Base.Vector
无效。此外,
mwc-random-0.13.1.1
软件包依赖于
vector-0.9.1
,正如您在上面的错误消息中所看到的那样。

实例是逐个定义的,每个类型都有

搜索
#定义primVector
。特别是,
primVector(Word32
应该是您正在寻找的实例


不过,我认为这并不能解决您的问题。

mwc random
正在选择较旧安装版本的
vector
,而不是最新版本。如果您卸载较旧版本的
vector
并重新安装mwc random以获取更新后的
vector-0.10
,则问题自行解决


(注:详见问题下方的评论链)

这对我来说很有效,但我确实
gen@bheklillr,因为有错误,我添加了类型签名。尽管如此,我还是得到了错误,但你没有,这非常令人惊讶。我使用的是vector 0.10.0.1和mwc random 0.13.1.0,也许你可以尝试更新你的vector版本以匹配?@bheklillr,我也安装了
vector 0.10.9.1
(正如通过
ghc pkg
确认的那样),但是
mwc random
似乎选择了
vector 0.9.1
。删除
vector 0.9.1
并重新安装
mwc random
将依赖项更新为
vector 0.10.9.1
,并修复了该问题。你能发布你的建议吗(请提及阴谋集团重建)作为答案?很高兴这是一个简单的解决方案。我已经发布了这个作为答案。
    No instance for (vector-0.9.1:Data.Vector.Generic.Base.Vector
                       U.Vector Word32)
      arising from a use of `initialize'
    Possible fix:
      add an instance declaration for
      (vector-0.9.1:Data.Vector.Generic.Base.Vector U.Vector Word32)
    In a stmt of a 'do' block:
      gen <- initialize (U.fromList [x] :: U.Vector Word32)
    In the second argument of `($)', namely
      `do { gen <- initialize (U.fromList [x] :: U.Vector Word32);
            v <- uniformR (1, 100) gen;
            return v }'
    In the expression:
      runST
      $ do { gen <- initialize (U.fromList [x] :: U.Vector Word32);
             v <- uniformR (1, 100) gen;
             return v }
Failed, modules loaded: none.