побег из кабального ада с помощью спешки, двоичного и zip-архива

#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 , которая также основана на взломе. Итак, вот как вы должны это решить:

  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
     
  2. Удалите эти два пакета из каталога библиотеки GHC. Это зависит от вашей установки, но загляните в ~/.ghc , ~/.cabal , и ~/Library/Haskell для lib каталога (возможно, в подкаталоге или двух) и посмотрите, сможете ли вы найти пакеты где-нибудь там.
  3. Установка haste-compiler-0.3 с ограничением на zip-archive версию:
     % cabal install --constraint='zip-archive==0.2.2.1' haste-compiler==0.3
     

Это должно сработать, но я сам не пробовал, так что это может пойти не так.