QuickCheck:根据其他任意对象定义任意实例

发布于 2024-10-19 20:16:07 字数 682 浏览 1 评论 0原文

我正在使用 QuickCheck 1,并且具有以下数据类型:

data A = ...
instance Arbitrary A where ...
data B = ...
instance Arbitrary B where ...
data C = C A B

现在我想为 C 定义一个 Arbitrary 实例,以便 C code> 值是使用 AB 的现有生成器生成的。我最终这样做了:

instance Arbitrary C where
  arbitrary = elements [(C a b) |
                        a <- generate 20 (System.Random.mkStdGen 0) arbitrary,
                        b <- generate 20 (System.Random.mkStdGen 0) arbitrary]

是否有必要为 AB 显式生成固定数量的值,或者是否有更好的方法来组合现有的 Arbitraries< /code> 变成一个新的?

I'm using QuickCheck 1 and I've got the following data types:

data A = ...
instance Arbitrary A where ...
data B = ...
instance Arbitrary B where ...
data C = C A B

Now I'd like to define an Arbitrary instance for C so that C values are generated using existing generators for A and B. I ended up doing this:

instance Arbitrary C where
  arbitrary = elements [(C a b) |
                        a <- generate 20 (System.Random.mkStdGen 0) arbitrary,
                        b <- generate 20 (System.Random.mkStdGen 0) arbitrary]

Is this explicit generation of a fixed number of values for A and B necessary, or is there a better way of combining existing Arbitraries into a new one?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

余生一个溪 2024-10-26 20:16:07

我会这样做:

instance Arbitrary C
  where arbitrary = do a <- arbitrary
                       b <- arbitrary
                       return (C a b)

虽然 sclv 使用 Control.Monad 中的 liftM2 的想法可能更好:

instance Arbitrary C
  where arbitrary = liftM2 C arbitrary arbitrary

I'd do it like this:

instance Arbitrary C
  where arbitrary = do a <- arbitrary
                       b <- arbitrary
                       return (C a b)

Although sclv's idea of using liftM2 from Control.Monad is probably better:

instance Arbitrary C
  where arbitrary = liftM2 C arbitrary arbitrary
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文