Alex 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

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

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


person dfordivam    schedule 17.11.2015    source источник
comment
Это похоже на проблему со сборкой alex с помощью cabal/stack. Если я соберу alex из его последнего исходного кода на github, то его оболочка будет выглядеть нормально. Открыта проблема здесь для отслеживания github.com/simonmar/alex/issues/73.   -  person dfordivam    schedule 17.11.2015


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

person dfordivam    schedule 18.11.2015