где генерировать функцию в Haskell Platform 2011.2.0.1 - PullRequest
0 голосов
/ 18 ноября 2011

хотел бы напечатать случайное число в диапазоне от 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

1 Ответ

2 голосов
/ 18 ноября 2011

Хорошо, первая проблема в том, что let создает локальную привязку, и вы используете ее в глобальной области. Если вы хотите, чтобы привязка была локальной для основного действия, я бы использовал, где выполнить привязку.Глядя на документы 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
...