Haskell 示例通常不起作用

标签 haskell haskell-platform

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

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

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

最佳答案

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

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

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

删除了 State 的 Monad Transformer Library 版本于 2010 年 10 月发布,因此遗憾的是仍然有很多代码因此无法在新版本中使用。值得庆幸的是,修复很简单。

关于Haskell 示例通常不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014218/

相关文章:

haskell - 使用 QuickCheck 为给定函数生成多个任意参数

haskell - Haskell 中的并发 : What if single thread but set +RTS -N

cabal - mac 上的 Haskell 平台将 cabal 安装在/usr/bin 中,但是 cabal 安装在 ~/Library/Haskell 中

haskell - 这种自由(更自由?)单子(monad)的构造有效吗?

haskell - 如何创建合适的 .tar.gz 文件以用于 `cabal upload` ?

haskell - 如何在 emacs - haskell 模式下运行 haskell 应用程序?

haskell - Windows 上的 Hoogle 数据

haskell - 如何让 Haskell 文档出现在 IntelliJ 中?

haskell - 如何为具有多个构造函数的数据类型编写 ToJSON/FromJSON 实例?

haskell - 跟踪约束的技术