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

时间:2014-02-18 17:04:33

标签: 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 = runST $ do
      gen <- initialize (U.fromList [x] :: U.Vector Word32)
      v <- uniformR (1,100) gen
      return v

问题是我在尝试使用initialize函数时遇到实例错误。这是我得到的实例错误:

    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.

我在info中运行ghci以确认没有为Data.Vector.Generic.Base.Vector定义任何实例。然后,我检查了hackage以获取文档,但该软件包没有页面。

所以,我的问题是缺少的实例定义在哪里。一旦我知道它的定义,我就可以加载它。导入Data.Vector.Generic.Base.Vector不起作用。另外,mwc-random-0.13.1.1包依赖于vector-0.9.1,如上面的错误消息所示。

2 个答案:

答案 0 :(得分:2)

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

(注:有关详细信息,请参阅问题下的评论链)

答案 1 :(得分:1)

实例是按类型逐个定义的。

http://code.haskell.org/vector/Data/Vector/Unboxed/Base.hs

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

我认为这不会解决您的问题。