4

IO を使用する SmallCheck プロパティを作成したいのですが、どうすればよいかわかりません。具体的には、 のインスタンスであるプロパティを記述して、に(またはに)Testable IO Boolフィードできるようにすることが目標です。残念ながら、私が思いつくことができる最高のものは次のとおりです。smallChecktestPropertytest-framework

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

Testable IO (IO Bool)ではなくのインスタンスであるため、これは機能しませんが、Testable IO Bool機能するように書き換える方法がわかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

4

monadicコンビネータが必要です。任意のモナドを取り、それをのインスタンスであるmにラップします。PropertyTestable

smallCheck 5  $ \(x :: Int) -> monadic $ (return True :: IO Bool)
于 2013-10-30T03:57:38.910 に答える
2

私が望んでいたことを正確に行う関数があることがわかりました:

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

次のように使用します。

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

具体的には、関数の引数のmonadicにネストする必要があることに注意してください。

于 2013-10-30T03:57:03.123 に答える