QuickCheck组合器,用于在给定范围内缩小长度列表

时间:2019-09-24 07:23:05

标签: haskell quickcheck

是否有一个QuickCheck函数来生成一个长度在给定范围内的列表,类似于使用hedgegog可以实现的列表,例如:

Gen.list (Range.constant 5 13) someGen

我猜一个人会写这样的东西:

  do
    n <- choose (minLength, maxLength)
    vectorOf n genA

使该函数成为多余,但是然后我想知道是否存在QuickCheck个组合器来缩小其不变性在于它们应具有最小长度的列表。 shrink的定义,例如:

  filter ((minLength <=) . length) [ xs' | xs' <- shrink xs ]

似乎效率很低,因为我们缩小了我们可以预先看到的无效术语(因为长度将小于最小阈值)。

1 个答案:

答案 0 :(得分:1)

如果您查看source函数的listOf1,您会发现它的实现与第二个代码段基本相同,只是它使用了sized函数,这意味着上面的代码收缩随收缩而减少。我认为,将1替换为您所需的最小界限就可以解决问题。