相关疑难解决方法(0)

如何在Quickcheck中使用修饰符(在我的情况下为正)

我有一个函数,rev它为三个类型类中的类型返回一些值:

rev :: (Integral a, Show a, Read a) => a -> a
rev = read . reverse . show
Run Code Online (Sandbox Code Playgroud)

我想通过quickcheck测试一些关于它的属性.虽然,我对测试Integral类型的负值不感兴趣,因为我在基础库中Integer缺少Natural类型.所以我想,让我们采取与生成的值为负时生成的值相反的方法,我会没事的:

prop_id :: (Integral a, Show a, Read a) => Positive a -> Bool
prop_id n | n >= 0    = (rev.rev) n == n
          | otherwise = let n' = -n in (rev.rev) n' == n'
Run Code Online (Sandbox Code Playgroud)

(测试的属性在这里并不重要 - 特别是它不适用于非常基本的值,我知道这一点,它不是这个问题的主题)

然后我遇到了Positive修改器,并认为虽然我的测试现在正在运行,但以更好的方式实现它会很好.所以我尝试过:

prop_id :: (Integral a, Show a, Read a) => Positive a …
Run Code Online (Sandbox Code Playgroud)

haskell quickcheck

8
推荐指数
1
解决办法
1432
查看次数

标签 统计

haskell ×1

quickcheck ×1