使用State monad或递归传递状态更好吗?

时间:2009-09-21 19:49:16

标签: haskell monads state-monad

我只是在学习Haskell,并试图找出实现视线算法的最惯用方法。

我发现的演示代码使用状态monad,但对我来说(我只是初学者)递归传递状态似乎更简单。我在这里错过了什么?是否存在性能问题?

在以下位置找到代码:http://www.finalcog.com/bresenham-algorithm-idiomatic-haskell

谢谢,

克里斯。

3 个答案:

答案 0 :(得分:12)

到处传递状态可能会有点麻烦。此外,状态monad是大多数haskell编码器所熟知的,所以他们会知道你在做什么。如果您在monad之外手动滚动自己,那么辨别代码的作用可能会很棘手。

我发现状态monad整齐用于封装状态更改,很明显你的代码的哪一部分是有状态的(即改变或取决于状态)w.r.t.其余的纯粹东西。

答案 1 :(得分:11)

对于较大的程序,最好隐藏monad中通过管道的状态。那时出错的风险较小。

答案 2 :(得分:3)

使用monad传递状态而不是明确传递状态的一个好处是,为monad定义了许多有用的组合器,你可以使用它们。