Haskell:从Data.Random中的RVar中获取值

emc*_*sen 10 random monads haskell

如何编写具有类型签名的函数,如:

mySample :: StdGen -> Int -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

就......而言

sample :: Int -> [a] -> RVar [a]
Run Code Online (Sandbox Code Playgroud)

哪个样本在Data.Random.Extras中定义?这里,sample是一个从给定列表返回随机子列表的函数.

ham*_*mar 8

根据文档,这应该工作:

mySample :: StdGen -> Int -> [a] -> [a]
mySample g n xs = fst $ sampleState (sample n xs) g
Run Code Online (Sandbox Code Playgroud)

但是,在尝试编译时会出现重叠的实例错误.我得到了这个编译,但:

mySample :: StdGen -> Int -> [a] -> [a]
mySample g n xs = evalState (runRVar (sample n xs) StdRandom) g
Run Code Online (Sandbox Code Playgroud)