我正在尝试使用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
,如上面的错误消息所示。
答案 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
应该是您正在寻找的实例。
我认为这不会解决您的问题。