现实世界中的Haskell代码无法编译?

7
我是一个有用的助手,可以为您翻译文本。
我将尝试编译 Real World Haskell - 第24章 LineCount.hs 中的一些代码。 我没有对代码进行任何更改。 但是,当我执行以下操作时:
ghc -O2 --make -threaded LineCount.hs

(按照书中的指示),我收到了这条消息:
MapReduce.hs:6:7: Not in scope: `rnf'

我可能做错了什么?

快速搜索显示过去在包并行和严格并发性方面存在问题,并重新安装它们可以解决该问题。但是,我尝试了一下,但它没有起作用。此外,有人指出,该问题已经在2010年解决:

https://groups.google.com/forum/?fromgroups=#!msg/happs/gOieP4xfpNc/nrasm842JlUJ

注意:编译同一章节中的其他文件时,我会收到各种其他错误。例如,在编译Strat.hs时,我得到:Module Control.Parallel.Strategies' does not export parZipWith'。在编译LineChunks.hs时,我得到:Module Control.Parallel.Strategies' does not export rnf'。

老实说,作为一个初学者Haskell程序员,我希望在修改代码时遇到麻烦 - 但我没有想到会在书本上的代码上遇到麻烦!


你可能需要 Control.DeepSeq http://www.haskell.org/hoogle/?hoogle=rnf - luqui
我刚刚安装了它,但是没有改变任何东西。 - Velvet Ghost
如果@Clark没有回答你的问题,请发布相关代码。 - Code-Apprentice
1个回答

10

这个函数不再被称为rnf,而是现在被称为rdeepseq。只需替换即可。 :)

你可以通过谷歌搜索“control parallel strategies hackage”或点击这里找到parallel包的内容。


太好了!非常感谢!那是我编译的第一段Haskell代码,开端不能再糟糕了。 :P - Velvet Ghost
1
没问题!Haskell 可以非常有趣。继续加油! - Clark Gaebel
1
有没有RWH勘误页面?mtl 1.x -> 2.0的转换让我迷失了一段时间。 - yatima2975
2
@yatima2975 没有任何官方勘误,但是有这个SO问题及其相应的答案:https://dev59.com/c2Ag5IYBdhLWcg3wU5m8 我发现它有时很有帮助。 - Mark Seemann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接