4

我是 haskell 的初学者,使用最新的 GHCi 2011.2.0.1。我经常遇到的一个挫折是,互联网和书籍中的示例(甚至来自官方的 haskell.org 站点,例如http://www.haskell.org/haskellwiki/State_Monad的 example-2 )经常无法编译。并且需要几轮寻找和发布问题才能找出问题所在。甚至 RWH 书中的一些示例也不起作用。

这是新版本的 haskell 或 haskell 平台的问题吗?正在开发的语言/平台是否不稳定,或者只有示例已过时?无论哪种方式,对于新学生来说,找到正确示例进行学习的最佳方法是什么?

更具体地说,您能帮助修复上面提到的 state monad 示例吗?

4

1 回答 1

9

在这种情况下,问题在于State构造函数已在最新版本的 Monad Transformer Library 中被删除。如果您将State定义中的使用替换为getNextwith state,那么程序就可以正常工作。(这是因为State被重新定义为StateT Identity,即身份单子上的状态单子转换器,因此单独的数据类型已被删除。如果您不知道这意味着什么,请不要担心;它只是意味着您必须在看到它时替换为。Statestate

Web 或 RWH 中现有示例的大多数问题仅仅是由于库的新版本。(我认为 RWH 示例的主要问题是 Parsec 示例是为 Parsec 2 编写的;Parsec 3 发生了很大变化,因此至少您可能需要添加一些导入。)

一般来说,Haskell 确实没有足够的最新、有用的资源。HaskellWiki 页面似乎没有维护。(虽然 HaskellWiki 确实是 haskell.org 的官方网站,但这些页面是由用户编写和维护的,因此 wiki 上的内容并不一定意味着它是最新的或高质量的。)

已删除的 Monad Transformer Library 版本State已于 2010 年 10 月发布,因此遗憾的是仍有很多代码不适用于新版本。值得庆幸的是,修复很简单。

于 2012-01-26T05:20:27.223 回答