首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SmallCheck中使用一元属性?

如何在SmallCheck中使用一元属性?
EN

Stack Overflow用户
提问于 2013-10-30 03:37:31
回答 2查看 186关注 0票数 4

我想编写一个使用IO的SmallCheck属性,但我不知道该如何做。具体来说,目标是编写一个作为Testable IO Bool实例的属性,以便我可以将它输入smallCheck (或test-framework中的testProperty )。不幸的是,我能想到的最好办法是:

代码语言:javascript
复制
smallCheck 5 (\(x :: Int) → return True :: IO Bool)

这不起作用,因为它是Testable IO (IO Bool)的实例,而不是Testable IO Bool的实例,但我不知道如何重写它以使其工作。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-30 03:57:38

您需要monadic组合器。它接受一个任意的单一m,并将其封装到一个Property中,该PropertyTestable的一个实例。

代码语言:javascript
复制
smallCheck 5  $ \(x :: Int) -> monadic $ (return True :: IO Bool)
票数 4
EN

Stack Overflow用户

发布于 2013-10-30 03:57:03

事实证明,有一个函数可以实现我想要的结果:

代码语言:javascript
复制
monadic :: Testable m a => m a -> Property m

你就这样用它:

代码语言:javascript
复制
smallCheck 5 $ \(x :: Int) → monadic (putStrLn (show x) >> return True)

具体来说,请注意函数参数之后需要如何嵌套monadic

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19673383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档