1

我正在尝试使用 ghc 7.10.2 和 alex 3.1.4 编译 lex.x,但它给出了以下错误。我检查了 Lex.hs,确实那里没有“Alex”的应用实例。

注意:在我从包装器 'monad' 移动到 'monad-bytestring' 后,此错误开始出现

templates/wrappers.hs:287:10:
    No instance for (Applicative Alex)
      arising from the superclasses of an instance declaration
    In the instance declaration for ‘Monad Alex’

我在 alex 3.1.4 中看到这是固定的http://hackage.haskell.org/package/alex

Changes in 3.1.4:

    Add Applicative/Functor instances for GHC 7.10

下面的提交介绍了应用实例,但它不在我生成的 Lex.hs 中。我可以手动使用下面的包装器来生成 Lex.hs 吗?

https://github.com/simonmar/alex/commit/b1472bfbb7b95bcd6c66558197e2603997d9ce0b

4

1 回答 1

1

这是此问题的解决方法。基本上,这涉及从最新的源代码构建 alex 并修改本地包装器。虽然这对我有用,但它也可能有一些未知的问题。

mkdir tmp; cd tmp;
git clone https://github.com/simonmar/alex.git
cd alex;
git checkout 3b7e8e4; 
cabal build;

然后将此目录中生成的“AlexWrapper-monad-bytestring”复制到本地 alex 安装中的那个。例如

cp AlexWrapper-monad-bytestring ~/.stack/snapshots/x86_64-linux/lts-3.14/7.10.2/share/x86_64-linux-ghc-7.10.2/alex-3.1.4/AlexWrapper-monad-bytestring

从 '3b7e8e4' 构建背后的原因是提交 '447bbb8' 由于引入了额外的功能而破坏了包装器的编译。

于 2015-11-18T12:13:31.567 回答