Haskell平台2011.2.0.1中的函数生成在哪里

Haskell平台2011.2.0.1中的函数生成在哪里,haskell,quickcheck,Haskell,Quickcheck,要打印0到10之间的随机数,但生成似乎未定义 无法编译,下面的代码从示例中编辑 我使用的是Haskell平台2011.2.0.1 更新: import System.IO import System.Random import Test.QuickCheck.Function import Test.QuickCheck.Gen import Test.QuickCheck main :: IO() main = putStrLn (show result) where result =

要打印0到10之间的随机数,但生成似乎未定义 无法编译,下面的代码从示例中编辑 我使用的是Haskell平台2011.2.0.1

更新:

import System.IO
import System.Random
import Test.QuickCheck.Function
import Test.QuickCheck.Gen
import Test.QuickCheck

main :: IO() 
main = putStrLn (show result)
  where result = unGen (choose (0, 10)) (mkStdGen 1) 1
由此产生的错误:

test6.hs:13:25:
    Ambiguous type variable `a0' in the constraints:
      (Random a0) arising from a use of `choose' at test6.hs:13:25-30
      (Show a0) arising from a use of `show' at test6.hs:12:18-21
      (Num a0) arising from the literal `10' at test6.hs:13:36-37
    Probable fix: add a type signature that fixes these type variable(s)
    In the first argument of `unGen', namely `(choose (0, 10))'
    In the expression: unGen (choose (0, 10)) (mkStdGen 1) 1
    In an equation for `result':
        result = unGen (choose (0, 10)) (mkStdGen 1) 1

好的,第一个问题是让我们创建一个本地绑定,并且您在全局范围内使用它,如果您希望绑定是主操作的本地绑定,我将使用where来进行绑定。查看QuickCheck文档,生成功能似乎已不存在。unGen有相同的类型签名,所以我相信它已经取代了它

import System.Random
import Test.QuickCheck
import Test.QuickCheck.Gen

main :: IO ()
main = putStrLn (show result)
  where result = unGen (choose (0::Int, 10::Int)) (mkStdGen 1) 1

将mkStdGen更改为MkGen,无法编译@種瓜得瓜種豆得豆 您确实需要一个
StdGen
对象。不支持使用其他随机生成器。mkStdGen现在可以使用,但上面的内容无法精确编译。GHC推断
结果::(随机a,显示a,数值a)=>a
。到目前为止,这很好(除非你遇到单态限制)。但是所需的输出是
show result
,其类型变为
(Random a,show a,Num a)=>String
,这是一种不明确的类型(约束中有一个类型变量未显示在
=>
的右侧)。该文件规定了在何种情况下解决此类歧义。这里,
Random
没有在标准libs中定义,因此cont……cont没有进行默认设置。在Haskell 98中,
Random
是标准库之一,因此对于足够老的编译器(可能是导入
Random
而不是
System.Random
),我希望该类型将默认为
Integer
(我没有足够大的ghc来检查,6.12不是默认值)。