从Gen(Maybe Int)转换为Maybe Int

时间:2012-10-28 17:31:22

标签: haskell quickcheck

我想将Gen (Maybe Int)转换为Maybe Int。我有一个函数,生成1到9之间的随机Just Int。我想使用单元格函数但我不能更改其类型签名中的任何内容。有什么建议吗?

 cell :: Gen (Maybe Int)
 cell = frequency
         [(9, return Nothing),
         (1, do n <- choose (1,9)  
                return (Just n))]

2 个答案:

答案 0 :(得分:3)

以下是一些方法

> sample' cell
[Nothing,Just 5,Nothing,Nothing,Just 7,Nothing,Nothing,Nothing,Nothing,Just 6,Nothing]

它将生成随机cell的列表。如果您只想获得一个元素,可以调用head。

您可以将unGen用作

main = do
    s <- newStdGen 
    print $ unGen cell s 100 -- 100 is arbitrary 

答案 1 :(得分:2)

您可以使用unGen :: Gen a -> StdGen -> Int -> a功能。它需要一个标准的随机数生成器(在System.Random中查找获取方法)和一个大小参数(我认为在这种情况下会被忽略)。