2015-11-17 1 views
1

Я пытаюсь скомпилировать файл lex.x с ghc 7.10.2 и alex 3.1.4, но он дает следующую ошибку. Я проверил Lex.hs и, действительно, нет никакого аппликативного экземпляра для 'Alex'.Alex wrappers.hs нет экземпляра приложения

Примечание: Эта ошибка начали приходить после того, как я переехал из обертки «монады» до «монады-байтовой строки»

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’ 

Я видел, что в Алексом 3.1.4 это было зафиксировано http://hackage.haskell.org/package/alex

Changes in 3.1.4: 

    Add Applicative/Functor instances for GHC 7.10 

Ниже commit ввел аппликативный экземпляр, но его нет в моем созданном Lex.hs. Могу ли я вручную использовать приведенную ниже оболочку для использования для генерации Lex.hs?

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

+2

Это похоже на проблему с построением alex с помощью cabal/stack. Если я построю alex из его последнего источника github, то его оболочка будет выглядеть отлично. Здесь была открыта проблема отслеживания https://github.com/simonmar/alex/issues/73. – dfordivam

ответ

1

Это временное решение этой проблемы. В основном это связано с построением alex из последнего исходного кода и модификацией локальной оболочки. Хотя это сработало для меня, но у него могут быть и некоторые неизвестные проблемы.

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

Затем скопируйте «AlexWrapper-монада-байтовой строки» генерируется в этом каталоге на один в вашей локальной установки Алексом. Например

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» ломает компиляцию обертки из-за введения дополнительной функции.