我想将 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))]
我想将 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))]
这里有一些方法可以做到这一点
> sample' cell
[Nothing,Just 5,Nothing,Nothing,Just 7,Nothing,Nothing,Nothing,Nothing,Just 6,Nothing]
它将生成一个随机cell
s 列表。如果您只想获取一个元素,则可以调用 head 。
您可以unGen
用作
main = do
s <- newStdGen
print $ unGen cell s 100 -- 100 is arbitrary
您可以使用该unGen :: Gen a -> StdGen -> Int -> a
功能。它需要一个标准的随机数生成器(寻找System.Random
获得一个的方法)和一个大小参数(我认为在这种情况下会被忽略)。