haskell的例子通常不起作用

haskell的例子通常不起作用,haskell,haskell-platform,Haskell,Haskell Platform,我是haskell的初学者,使用最新的GHCi 2011.2.0.1。我经常遇到的一个挫折是,互联网和书籍上的例子(甚至是官方网站haskell.org上的例子,例如的例子2)常常无法编译。要想找出问题所在,需要几轮搜寻和发布问题。即使是RWH书中的一些例子也不起作用 这是新版本的haskell还是haskell平台的问题?语言/平台是否正在开发中且不稳定,或者只有示例已过时?不管怎样,对于一个新生来说,找到正确的例子学习的最佳方式是什么 更具体地说,您能帮助修复上面提到的state monad

我是haskell的初学者,使用最新的GHCi 2011.2.0.1。我经常遇到的一个挫折是,互联网和书籍上的例子(甚至是官方网站haskell.org上的例子,例如的例子2)常常无法编译。要想找出问题所在,需要几轮搜寻和发布问题。即使是RWH书中的一些例子也不起作用

这是新版本的haskell还是haskell平台的问题?语言/平台是否正在开发中且不稳定,或者只有示例已过时?不管怎样,对于一个新生来说,找到正确的例子学习的最佳方式是什么


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

在这种情况下,问题是最新版本的monad Transformer库中删除了
state
构造函数。如果将
getNext
定义中的
State
替换为
State
,则程序运行正常。(这是因为
State
被重新定义为
StateT Identity
,也就是说,State monad转换器位于Identity monad之上,因此单独的数据类型已被删除。如果您不知道这意味着什么,请不要担心;这只意味着您在看到它时必须将
State
替换为
State
。)

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

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


Monad Transformer Library版本于2010年10月发布,删除了
状态
,因此仍有大量代码无法与新版本配合使用,这让人感到遗憾。谢天谢地,修复方法很简单。

我知道有几本haskell的书使用了Hugs,这是haskell的稳定版本。也许更多地研究这一点会有所帮助。祝你好运。@wespiserA:嗯?Hugs上次更新是在2006年,没有实现最新的Haskell标准。我想它是稳定的,因为它永远不会改变,但它也不会与任何现代图书馆一起工作。正如我之前所说的:RWH在错误的时间出现,至少在一些方面是错误的。它是在一些大型更改(异常、mtl/transformers)之前,在一些现在可能比本书使用的库(例如:attoparsec)更受欢迎的主要库之前,也在一些小型但重要的更改之前(
instance Monad或
changed&moved)。这绝不是对这本书的讽刺,而是对作者关于第二版的想法的同意,以及你关于语言变化率的问题(实施和实践中——规范和核心是稳定的)。@Rog:你可能应该为你的第二个问题提一个单独的问题。非常感谢,这很有帮助。令人遗憾的是,2010年的代码更新仍然没有反映在维基上,而RWH的书也已经过时了。新生们肯定需要一本新书来学习哈斯克尔。还有其他的书/文档吗?我喜欢(虽然它的代码中仍然有
状态
),但是RWH真的没有问题;显然,作者们正在考虑写一个新版本。MTL2和Parsec3是我能想到的唯一会影响最新入门教程的主要更改,而让代码同时使用两者的更改应该是次要的。我刚刚修复了wiki上的特定错误。当你遇到问题时,你可以随意申请一个帐户并解决问题。