似乎没有太多关于确保F#中的函数保持纯净的在线。
要创建一个示例,有没有办法在F#中使printfn / IO纯净?
答案 0 :(得分:9)
你可以谷歌搜索Haskell的IO monad的F#实现。 Here是一个很好的例子。
答案 1 :(得分:0)
根据定义打印到控制台会改变状态(控制台状态)并产生副作用(例如删除某些控制台缓冲区)。
如果您正在使用某些CodeContracts或类似的东西,您应该考虑在其他地方写出函数结果,或者使用断言(Contract.Assume或Contract.Assert(这用于静态断言))更容易确认您的代码是否有效。