我一直在浏览http://www.algorithm.com.au/downloads/talks/monads-are-not-scary/monads-are-not-scary-chak.pdf上的幻灯片.
和约.通过甲板75%的方式有一个要点"重新定义IO以简化调试!"
这看起来像一个非常有趣的想法!有人可以举一个说话者谈论的实际例子吗?
Jed*_*dai 10
那么,如果不是IO,你使用了一个模拟具有完美控制和规定环境的I/O的monad?您可以轻松地测试这些"IO"操作,就像它们是纯函数一样.这就是IOSpec背后的想法,它可以让您更精确地指定您希望在模拟IO中允许哪种效果,您可以写:
myFunction :: a -> b -> IOSpec (Teletype :+: IORefS)
myFunction x y = do
...
putStr (...)
ref <- newIORef ...
...
Run Code Online (Sandbox Code Playgroud)
(teletype允许终端功能,IORefS用于参考)然后在quickcheck属性中测试你的功能(参见VM模块和runIOSpec),完全控制输入和输出,甚至是GHCI中的一步一步.如果它正常工作,只需更改导入以引入Test.IOSpec.Surrogate,它将IOSpec f重新定义为IO的同义词.
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |