gpt4 book ai didi

haskell - 如何生成简单类型的任意实例以进行快速检查

转载 作者:行者123 更新时间:2023-12-03 07:38:56 26 4
gpt4 key购买 nike

我有一个简单的类型定义:

data Cell = Cell {
x :: Int,
y :: Int
} deriving (Show)

我无法使用Cell作为quickcheck属性的输入,大概是因为quickcheck不知道如何生成Cell值。

我的理解是,我需要使 Cell 成为 Arbitrary 类型类的实例。

例如,如果我希望生成 x 和 y 为随机正值的单元格,我该怎么做?

最佳答案

为您的数据类型编写一个Arbitrary实例很容易。您只需实现任意函数,它应该返回一个Gen Cell。最简单的方法是利用现有的 Arbitrary 实例,并注意 Gen 是一个 monad,因此我们可以使用 do-符号:

instance Arbitrary Cell where
arbitrary = do
Positive x <- arbitrary
Positive y <- arbitrary
return $ Cell x y

或者,通常可以使用 Control.Applicative 中的运算符来优雅地编写生成器:

instance Arbitrary Cell where
arbitrary = Cell <$> pos <*> pos
where pos = getPositive <$> arbitrary -- getPositive requires QC >= 2.5

在这里,我还使用了 Test.QuickCheck.Modifiers 中的 Positive 修饰符。确保我们只生成正整数。

要编写更复杂的生成器,请查看Test.QuickCheck.Gen中的各种生成器。 .

关于haskell - 如何生成简单类型的任意实例以进行快速检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16440208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com