我正在尝试使用 Tasty 库和 SmallCheck 编写基于属性的测试。但我需要在属性检查功能中使用 IO,并且我还需要 I/O 资源。所以,我把现有的测试变成了:
myTests :: IO Cfg -> TestTree
myTests getResource = testGroup "My Group"
[
testProperty "MyProperty" $
-- HOW TO CALL getResource here, but not in
-- function, so to avoid multiple acquisition
-- Some{..} <- getResource
\(x::X) -> monadic $ do -- HERE I WILL DO I/O...
]
所以,问题是:如何调用 getResource 一次?所以,不是在\(x::X) -> ...
身体里,而是在它之前。可能吗?