2017-05-05 53 views
1

我试图安装“Haskell:The Craft of Functional Programming”,第3版。Craft3e:cabal安装不在范围内:应用

我在CentOS版本使用GHCI,版本7.6.3 7

然后:

cabal unpack Craft3e 
cd Craft3e-0.1.1.0/ 
cabal install 
... 
[29 of 67] Compiling CalcParseLib  (Calculator/CalcParseLib.hs, dist/build/CalcParseLib.o) 
Calculator/CalcParseLib.hs:132:10: 
Not in scope: type constructor or class `Applicative' 
Failed to install Craft3e-0.1.1.0 
cabal: Error: some packages failed to install: 
Craft3e-0.1.1.0 failed during the building phase. The exception was: 
ExitFailure 1 

我已经尝试此安装多次,但不能 克服这种错误。

我可以使用“cabal install”以外的东西吗?

在我学习这个例子之前,我有很多需要了解Haskell的知识, 但是知道安装是否好! :)

+0

你可以使用更新的GHC(> = 7.10)吗?看起来这个软件包没有使用旧版本进行测试。升级比编辑它更容易编译。 –

+0

是的,升级工程。我更新到ghc 8.0.2。我在交易锁定方面遇到了一些问题,但我刚刚重新启动并清理完毕。 –

回答

1

你有三个选择:

  1. 安装an older version of the Craft3e package,例如用cabal unpack Craft3e-0.1.0.10

  2. 查找您与cabal unpack下载源文件Calculator/CalcParseLib.hs,并添加一个...

    import Control.Applicative 
    

    ...线旁边的其他import行开头。我怀疑你必须对其他模块做同样的事情,如果在你做这个改变后在其他地方出现同样的错误,并且可能还有其他类似的问题。

  3. 安装更新版本的GHC(7.6.3是从2013年开始)。尽管默认的CentOS版本库不会提供这些功能,但还有其他选项,例如非官方的Fedora存储库和手动安装。有关说明,请参阅this page

#3是最终的解决方案。如果您现在只想开始阅读本书,那么您可以参加#1并在稍后重新安装。


出于参考起见,这里是问题的简要说明(我会使用一些陌生的名词,但你会很快了解他们作为你学习哈斯克尔)。有一个重要的类型叫做Applicative,由于历史的原因,它并没有像其他核心库那样与其它应用程序完全整合。这种情况在GHC 7.10中得到了纠正,在Prelude(默认在Haskell程序中导入的模块)中都包含Applicative,并且有必要在多处失踪的地方添加Applicative实例。在Craft3e包中的代码进行了更新,使这些Applicative实例已经到位(参见this entry in the book's blog),但import Control.Applicative线,这将是必要的,使老年人GHCs更新的代码工作没有Applicative中拉开序幕,没有被添加,导致你看到的错误。

+0

是的,这个工程。我更新为ghc 7.6.3。我在交易锁定方面遇到了一些问题,但我刚刚重新启动并清理完毕。我希望将来我能通过帮助别人来报答你的关注。 :);) –

+0

@TrailingDots很高兴它帮助!关于你的评论只是一件事:或许你的意思是你安装了一个更新的GHC(如当前的8.0.2),因为7.6.3是你之前的? – duplode

+0

糟糕 - 你是对的。我现在有ghci 8.0.2。 –