0

我正在尝试使用cabal install c2hs. 我创建~/.cabal/bin了预先安装二进制文件。

使用命令cabal install c2hs获取错误。

src/Control/StateTrans.hs:77:1: Warning:
    Module `Prelude' does not export `catch'
[ 3 of 26] Compiling Data.Errors      ( src/Data/Errors.hs, dist/build/c2hs/c2hs-tmp/Data/Errors.o )
[ 4 of 26] Compiling Data.Attributes  ( src/Data/Attributes.hs, dist/build/c2hs/c2hs-tmp/Data/Attributes.o )
[ 5 of 26] Compiling Text.Lexers      ( src/Text/Lexers.hs, dist/build/c2hs/c2hs-tmp/Text/Lexers.o )
[ 6 of 26] Compiling Control.StateBase ( src/Control/StateBase.hs, dist/build/c2hs/c2hs-tmp/Control/StateBase.o )
[ 7 of 26] Compiling Data.NameSpaces  ( src/Data/NameSpaces.hs, dist/build/c2hs/c2hs-tmp/Data/NameSpaces.o )
[ 8 of 26] Compiling C2HS.C.Attrs     ( src/C2HS/C/Attrs.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Attrs.o )
[ 9 of 26] Compiling C2HS.C.Builtin   ( src/C2HS/C/Builtin.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Builtin.o )
[10 of 26] Compiling Paths_c2hs       ( dist/build/autogen/Paths_c2hs.hs, dist/build/c2hs/c2hs-tmp/Paths_c2hs.o )

dist/build/autogen/Paths_c2hs.hs:21:13: Not in scope: `catch'

dist/build/autogen/Paths_c2hs.hs:22:13: Not in scope: `catch'

dist/build/autogen/Paths_c2hs.hs:23:14: Not in scope: `catch'

dist/build/autogen/Paths_c2hs.hs:24:17: Not in scope: `catch'
cabal: Error: some packages failed to install:
c2hs-0.16.5 failed during the building phase. The exception was:
ExitFailure 1

安装有什么问题?ghc 版本是 7.6.3。

4

2 回答 2

1

该安装现在对我有用,在我的 Ubuntu 机器上,所以我可以肯定地说,c2hs 现在对每个人都没有损坏。

我认为您可能有版本问题....尝试

cabal update

并再次尝试安装。

尤其-

Prelude.catch 函数最近移至 Control.Exception.catch,请参阅https://ghc.haskell.org/trac/ghc/ticket/4865。我下载了 c2hs 源代码(使用 cabal unpack c2hs),并查看了 Paths_c2hs.hs 需要的头文件(这似乎是存在导入问题的文件)。这是导入部分包含的内容-

import qualified Control.Exception as Exception
import Data.Version (Version(..))
import System.Environment (getEnv)
import Prelude

(Paths_c2hs.hs 是自动生成的,所以我必须先构建它)。

事实上,它使用了 Control.Exception。因为这是基础模块,你应该拥有它,并且可能只是有过时/不匹配的包。(事实上​​,我的文件的行号与您上面的错误消息行号不匹配 - 这是我们使用不同版本的另一个迹象,我相信我的版本是最新的 :)。)

虽然我认为“阴谋集团更新”会解决问题,如果没有,请尝试在这两个地方寻找——

  1. Control.Exception.catch 是否存在于您的基本模块中?只需尝试使用要捕获的虚拟引用编译一个空程序,就像这样-

    导入 Control.Exception

    x = 捕获

    主要 = 未定义

  2. 您自动生成的 Paths_c2hs.hs 是否指向正确的 catch 函数。只需使用 cabal 解包、配置和构建 c2hs,然后查看 dist/build/autogen/Paths_c2hs.hs。(您可能会在构建阶段遇到错误,但鉴于您在上面显示的内容,它将在 Paths_c2hs.hs 创建之后发生)。

于 2013-12-15T23:29:57.273 回答
0

问题是我在我的 mac 上安装了两个不同版本的 ghc:一个来自 haskell platform brew install ghc,另一个来自haskell platform

我必须安装最新版本的 haskell 平台,但在此之前我还需要卸载旧版本uninstall-hs only VERSIONbrew unistall ghc.

重新安装最新的haskell平台后,编译工作正常。

其他方法可以使用 brew brew install haskell-platform

于 2013-12-16T02:57:15.030 回答