我想编写一个使用IO的SmallCheck属性,但我不知道该如何做。具体来说,目标是编写一个作为Testable IO Bool实例的属性,以便我可以将它输入smallCheck (或test-framework中的testProperty )。不幸的是,我能想到的最好办法是:
smallCheck 5 (\(x :: Int) → return True :: IO Bool)这不起作用,因为它是Testable IO (IO Bool)的实例,而不是Testable IO Bool的实例,但我不知道如何重写它以使其工作。
任何帮助都将不胜感激。
发布于 2013-10-30 03:57:38
您需要monadic组合器。它接受一个任意的单一m,并将其封装到一个Property中,该Property是Testable的一个实例。
smallCheck 5 $ \(x :: Int) -> monadic $ (return True :: IO Bool)发布于 2013-10-30 03:57:03
事实证明,有一个函数可以实现我想要的结果:
monadic :: Testable m a => m a -> Property m你就这样用它:
smallCheck 5 $ \(x :: Int) → monadic (putStrLn (show x) >> return True)具体来说,请注意函数参数之后需要如何嵌套monadic。
https://stackoverflow.com/questions/19673383
复制相似问题