generate
не является функцией в System.Random
.Возможно, вы ищете next
?
РЕДАКТИРОВАТЬ: Позвольте мне прояснить: я не знаю, почему вы используете QuickCheck / Arbitrary для задачи, которую Random / MonadRandom может показаться более подходящим.Я предполагаю, что вы рассмотрели свои варианты и продолжите.
Вы должны выбрать свой генератор?Разве вы не можете использовать sample' :: Gen a -> IO a
?
getVal :: IO a
getVal = sample' arbitrary
Это должно работать для QC2.
OTOH, если вы действительно хотите использовать свой собственный StdGen
(или хотите избежать IO), тогда попробуйте:
import System.Random
import Test.QuickCheck
import Test.QuickCheck.Gen
func :: StdGen -> Int
func g = unGen arbitrary g 0
Это будет использовать StdGen
с именем g
иколичество (0
здесь,) для генерации вашего значения.Поскольку unGen не шагает по генератору, а пошаговый счетчик не дает хороших свойств случайности (кажется, вы можете попробовать и убедиться сами), вам может понадобиться обернуть это чем-то, что генерирует StdGen
s (гадость).
Если вы не знаете, какой пакет версий вы используете, запустите:
$ ghc-pkg list | grep QuickCheck
(QuickCheck-2.1.1.1)
QuickCheck-1.2.0.1
В моей настройке (см. Выше) у меня есть 1 и 2, но 2 скрыто(()
означает скрытый), поэтому, когда я использую GHCi и импортирую Test.QuickCheck
, я получаю версию 1.