我正在使用在线书籍"Learn you a Haskell for great Good"学习Haskell。
据我所知,直到我遇到介绍State Monad的章节为止,我已经能够理解单子了。
然而,所呈现的代码声称是State类型的Monad实现(我无法在Hoogle中找到它),对我来说似乎太难以处理了。
首先,我不明白它背后的逻辑,即为什么它应该起作用,作者是如何考虑这种技术的。(也许可以推荐相关文章或白皮书?)
在第4行,建议函数f接受1个参数。
然而,在几行之后,我们看到pop,它不带任何参数!扩展点1,作者试图使用函数表示状态是为了什么。
非常感谢任何帮助我理解发生了什么。
编辑
致有关人员:
下面的答案全面回答了我的问题。
我想补充一点:
在阅读下面推荐的文章后,我找到了上述第二个问题的答案:
所有这些时间,我"假设"pop函数将像这样使用:
stuff >>= pop
,因为在绑定类型中,第二个参数是函数,而正确的用法是这样的pop >>= stuff
,我在再次阅读如何将do-notation转换为普通绑定lambda之后意识到了这一点。