14
我一直在浏览幻灯片http://www.algorithm.com.au/downloads/talks/monads-are-not-scary/monads-are-not-scary-chak.pdf重新定义IO以简化调试?
和约。通过甲板的75%的方法是“重新定义IO以简化调试!”。
这看起来像一个非常有趣的想法! 有人可以举一个演讲者正在谈论的实例吗?
我一直在浏览幻灯片http://www.algorithm.com.au/downloads/talks/monads-are-not-scary/monads-are-not-scary-chak.pdf重新定义IO以简化调试?
和约。通过甲板的75%的方法是“重新定义IO以简化调试!”。
这看起来像一个非常有趣的想法! 有人可以举一个演讲者正在谈论的实例吗?
那么,如果不是IO,而是使用了一个模拟I/O的monad,并且具有完美的控制和规定的环境呢?你可以很容易地测试那些“IO”操作,就像它们是纯函数一样。这背后例如IOSpec,它允许您精确地指定你想要什么样的效果,让你的模拟IO去更远的想法,你可以写:
myFunction :: a -> b -> IOSpec (Teletype :+: IORefS)
myFunction x y = do
...
putStr (...)
ref <- newIORef ...
...
(电传允许终端的功能, IORefS作为参考) 然后在一个quickcheck属性中测试你的函数(参见VM模块和runIOSpec),完全控制输入和输出,甚至在GHCI中一步一步地进行测试。如果工作正常,只需更改导入以引入Test.IOSpec.Surrogate,它将IOSpec f重新定义为IO的同义词。