gpt4 book ai didi

haskell - 显示 QuickCheck 属性中使用的函数

转载 作者:行者123 更新时间:2023-12-04 02:03:38 24 4
gpt4 key购买 nike

我正在尝试写 QuickCheck将一个或多个函数作为输入的属性。为了简单起见,考虑一个属性来检查函数组合是否等同于连续的函数应用,以及一个快速而简单的测试驱动程序:

import Test.QuickCheck

prop_composition :: (Int -> Int) -> (Int -> Int) -> Int -> Bool
prop_composition f g x = (f . g) x == f (g x)

main :: IO ()
main = quickCheck prop_composition

不幸的是,这不能编译,因为属性的输入需要实现 Show这样 QuickCheck 可以报告导致失败的输入,但是没有 Show功能实现:
Test.hs:10:7:
No instance for (Show (Int -> Int))
arising from a use of `quickCheck' at Test.hs:10:7-33
Possible fix: add an instance declaration for (Show (Int -> Int))
In the expression: quickCheck prop_composition
In the definition of `main': main = quickCheck prop_composition

我尝试编写自己的无操作实例 Show对于函数...
instance Show (a -> b) where
show _ = "[func]"

... 编译,但触发警告 -Wall ...
Test.hs:3:9: Warning: orphan instance: instance Show (a -> b)

...这让我认为有更正确的方法可以做到这一点。

我的直觉告诉我答案在于 Test.QuickCheck.Function 模块,但它没有记录,我无法仅通过查看类型签名来弄清楚其中的任何内容或打算如何使用它。

最佳答案

你是对的Test.QuickCheck.Function是正确的答案。
您只需更改类型:

prop_composition       :: Fun Int Int -> Fun Int Int -> Int -> Bool
prop_composition f g x = ((apply f) . (apply g)) x == (apply f) ((apply g) x)

关于haskell - 显示 QuickCheck 属性中使用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208621/

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