2

我想将 a 转换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))]
4

2 回答 2

3

这里有一些方法可以做到这一点

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

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

您可以unGen用作

main = do
    s <- newStdGen 
    print $ unGen cell s 100 -- 100 is arbitrary 
于 2012-10-28T19:18:34.793 回答
2

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

于 2012-10-28T17:49:59.247 回答