我想编写一个使用 IO 的 SmallCheck 属性,但我不知道应该怎么做。具体来说,目标是编写一个属性,该属性是 Testable IO Bool
的一个实例,这样我就可以将它提供给 smallCheck
(或 testProperty
测试框架
)。不幸的是,我能想到的最好的是:
smallCheck 5 (\(x :: Int) → return True :: IO Bool)
这不起作用,因为它是 Testable IO (IO Bool)
而不是 Testable IO Bool
的实例,但我不知道如何重写这样它就可以工作了。
如有任何帮助,我们将不胜感激。
最佳答案
您需要 monadic
组合器。它采用任意 monad m
并将其包装到一个 Property
中,该 Property
是 Testable
的一个实例。
smallCheck 5 $ \(x :: Int) -> monadic $ (return True :: IO Bool)
关于testing - 如何在 SmallCheck 中使用 monadic 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19673383/