Haskell 使用状态单子更好,还是递归传递状态更好?

Haskell 使用状态单子更好,还是递归传递状态更好?,haskell,monads,state-monad,Haskell,Monads,State Monad,我只是在学习Haskell,并试图找出实现视线算法的最惯用方法 我发现的演示代码使用状态monad,但递归传递状态对我来说似乎更简单(我只是一个初学者)。我错过了什么?是否存在性能问题 查找代码: 谢谢 克里斯。到处传递状态可能会变得有点冗长。此外,大多数haskell编码人员都知道state monad,因此他们会知道你在做什么。如果您在monad之外手动滚动自己的代码,则很难识别代码的功能 我发现state monad可以很好地封装状态更改,很明显,代码的哪一部分是有状态的(即更改或取决于状

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

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

查找代码:

谢谢


克里斯。

到处传递状态可能会变得有点冗长。此外,大多数haskell编码人员都知道state monad,因此他们会知道你在做什么。如果您在monad之外手动滚动自己的代码,则很难识别代码的功能


我发现state monad可以很好地封装状态更改,很明显,代码的哪一部分是有状态的(即更改或取决于状态),而其余部分是纯内容。

对于较大的程序,最好在monad中隐藏状态传递管道。这样错误的风险就小了。

使用monad传递状态而不是显式传递状态的优点,您可以使用为单子定义的许多有用的组合符。

递归可能会较慢,并导致堆栈grow@Tnay递归也可以更快,并且可以在恒定的堆栈空间中运行monad不一样。学习如何使用monad也很重要,所以在你知道如何完成同样的事情的情况下使用monad是一个很好的学习方法。