我正在尝试使用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.h中不存在。我可以手动使用下面的包装器来生成Lex.hs吗?
https://github.com/simonmar/alex/commit/b1472bfbb7b95bcd6c66558197e2603997d9ce0b
答案 0 :(得分: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'打破了包装器的编译。