【问题标题】:How does one use monadic properties in SmallCheck?如何在 SmallCheck 中使用一元属性?
【发布时间】:2013-10-30 03:37:31
【问题描述】:

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

smallCheck 5 (\(x :: Int) → return True :: IO Bool)

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

任何帮助将不胜感激。

【问题讨论】:

    标签: testing haskell monads smallcheck


    【解决方案1】:

    你想要monadic 组合子。它采用任意 monad m 并将其包装到 Property 中,这是 Testable 的一个实例。

    smallCheck 5  $ \(x :: Int) -> monadic $ (return True :: IO Bool)
    

    【讨论】:

      【解决方案2】:

      事实证明,有一个函数完全符合我的要求:

      monadic :: Testable m a => m a -> Property m
      

      你这样使用它:

      smallCheck 5 $ \(x :: Int) → monadic (putStrLn (show x) >> return True)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        • 1970-01-01
        • 2023-04-04
        • 2013-10-08
        • 2013-02-11
        • 1970-01-01
        相关资源
        最近更新 更多