【发布时间】:2020-12-30 12:52:37
【问题描述】:
我无法弄清楚如何在不使用gen 工作流语法的情况下制作 fscheck 生成器,并假设必须有一个好的方法来做到这一点。我最终得到一个嵌套的 Gen<Gen<... 并想要一个扁平版本。使用option 我会使用Option.bind 来消除嵌套。对于seq,我会使用SelectMany。但是我没有看到Gen模块中出现这种方法。
// return a Gen<char list> as expected
// first makes a random number from 5 to 8
// and then creates a random list of characters that long
let randomListLengths =
gen {
let! len = Gen.choose(5,8)
let! item = Gen.elements ['a';'b';'c'] |> Gen.listOfLength len
return item
}
// return a Gen<Gen<char list>>
let anotherWayThatDoesNotWork =
Gen.choose(5, 8)
|> Gen.map (fun len -> Gen.elements['a';'b';'c'] |> Gen.listOfLength len)
【问题讨论】: