Алекс wrappers.hs нет экземпляра Applicative
Я пытаюсь скомпилировать lex.x с помощью ghc 7.10.2 и alex 3.1.4, но выдает следующую ошибку. Я проверил Lex.hs, и действительно, там нет аппликативного экземпляра для "Алекса".
Примечание. Эта ошибка начала появляться после того, как я перешел из оболочки '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
Ниже commit представил аппликативный экземпляр, но его нет в моем сгенерированном Lex.hs. Могу ли я вручную использовать приведенную ниже оболочку, которая будет использоваться для создания Lex.hs?
https://github.com/simonmar/alex/commit/b1472bfbb7b95bcd6c66558197e2603997d9ce0b
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' нарушает компиляцию оболочки из-за введения дополнительной функции.