#javascript #haskell #cabal
#javascript #haskell #cabal
Вопрос:
Я бы хотел использовать пакет компилятора haste для преобразования haskell в javascript:
jsnavely@beefy:~/project$ cabal install haste-compiler
Resolving dependencies...
...
Configuring zip-archive-0.2.3...
Building zip-archive-0.2.3...
Preprocessing library zip-archive-0.2.3...
[1 of 1] Compiling Codec.Archive.Zip ( src/Codec/Archive/Zip.hs, dist/build/Codec/Archive/Zip.o )
src/Codec/Archive/Zip.hs:163:27: Not in scope: `decodeOrFail'
Failed to install zip-archive-0.2.3
cabal: Error: some packages failed to install:
haste-compiler-0.3 depends on zip-archive-0.2.3 which failed to install.
zip-archive-0.2.3 failed during the building phase. The exception was:
ExitFailure 1
Я заметил, что существует более новая версия zip-архива, которая увеличила версию двоичного файла до> = 0.7, которая предоставляет decodeOrFail
функцию. Итак, я попытался проверить репозиторий haste-compiler и перенести версию zip-архива в новый zip-архив 0.2.3.2. Но это не помогает:
jsnavely@beefy:~/project/haste-compiler$ cabal install
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: haste-compiler-0.3 (user goal)
trying: zip-archive-0.2.3.2/installed-208... (dependency of
haste-compiler-0.3)
trying: ghc-7.6.3/installed-0d1... (dependency of haste-compiler-0.3)
next goal: bin-package-db (dependency of ghc-7.6.3/installed-0d1...)
rejecting: bin-package-db-0.0.0.0/installed-837... (conflict: zip-archive =>
binary==0.7.1.0/installed-961..., bin-package-db =>
binary==0.5.1.1/installed-5b8...)
Dependency tree exhaustively searched.
Я также попытался вручную установить zip-архив и двоичный файл и сделать все это в изолированной среде. Я не знаю, что делать — я бы очень хотел заменить весь мой javascript хорошо типизированным haskelly goodness.Я сталкиваюсь с той же проблемой на моем macbookpro и моем linux box, оба работают на последней платформе haskell, ghc версии 7.6.3
Ответ №1:
Ваше дерево зависимостей выглядит примерно так:
┌────────────────────┐
┌─────────┤ haste─compiler─0.3 │
│ depends └─────────────────┬──┘
V │
┌───────────┐ │ depends
│ ghc─7.6.3 │ │
└─────┬─────┘ V
│ depends ┌─────────────────────┐
V │ zip─archive─0.2.3.2 │
┌────────────────────────┐ └───────────┬─────────┘
│ bin─package─db─0.0.0.0 │ │
└───────────┬────────────┘ │ depends
│ depends │
V V
┌────────────────┐ conflicts with ┌────────────────┐
│ binary─0.5.1.1 │<────────────────>│ binary─0.7.1.0 │
└────────────────┘ └────────────────┘
Поскольку для вас, вероятно, невозможно переустановить GHC, и поэтому он и все, что ниже него, «исправлены на месте» для нас, нам придется попытаться изменить zip-archive-0.2.3.2
и binary-0.7.1.0
. Давайте посмотрим на ограничения haste-compiler-0.3
:
zip-archive
Таким образом, он вообще не указывает версию. Подойдет любой. Если мы посмотрим на предыдущие версии zip-archive
, мы увидим, что версия 0.2.2.1 является самой ранней версией, которая имеет ограничение на binary
совместимость с установленной binary-0.5.1.1
, которая также основана на взломе. Итак, вот как вы должны это решить:
- Отменить
zip-archive-0.2.3.2
регистрацию иbinary-0.7.1.0
в таком порядке:% ghc-pkg unregister zip-archive-0.2.3.2 % ghc-pkg unregister binary-0.7.1.0
- Удалите эти два пакета из каталога библиотеки GHC. Это зависит от вашей установки, но загляните в
~/.ghc
,~/.cabal
, и~/Library/Haskell
дляlib
каталога (возможно, в подкаталоге или двух) и посмотрите, сможете ли вы найти пакеты где-нибудь там. - Установка
haste-compiler-0.3
с ограничением наzip-archive
версию:% cabal install --constraint='zip-archive==0.2.2.1' haste-compiler==0.3
Это должно сработать, но я сам не пробовал, так что это может пойти не так.