Вопрос

С чистой установкой «Платформы Haskell».(OS X Snow-Leopard & Platform 2010.1.0.1), выполнение этой операции приводит к очень странным последствиям простой последовательности. cabal install поведение:

$ cabal install time

$ cabal install random

$ ghc-pkg list random
/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.1/package.conf.d
   random-1.0.0.2
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
   random-1.0.0.2

random-1.0.0.2 установлен дважды в моей системе.и сейчас делаю cabal install random переустанавливает random-1.0.0.2 каждый раз.

Выглядит как random зависит от time, и клика хочет переустановить его после выхода новой версии time доступный?И из-за двух random-1.0.0.2 клика в замешательстве и всегда думает, что она не в курсе, потому что смотрит на первую?

ghc-pkg check не находит ошибок.

Это было полезно?

Решение 3

Я опишу работу, которая работала так далеко для меня. Я пробовал много разных вещей, но я описал только здесь попытку, которая работала.

(BTW: я использую Mac OS X 10.6.4, и ваши результаты могут отличаться в разных системах)

  • Я установил GHC 6.12.3 из источника. Не удаляйте свой предыдущий GHC, так как Building GHC не требует этого.
  • Я удалил симличину в /usr/bin (для ghc, ghci, ghc-pkg, а также runhaskell) к моему предыдущему GHC, который был единственным из платформы Haskell 2010.1.0.1.
  • Я установил cabal-install используя это bootstrap.sh скрипт
  • Я установил исправленные версии random а также haskell98 пакеты. Различия просто в их .cabal файлы
    • надоедливый randomверсия до 1.0.0.2.1 и изменил его зависимость на time быть time == 1.1.*
    • надоедливый haskell98версии до 1.0.1.1.1 вот и все
  • Я побежал cabal update а также cabal upgrade чтобы увидеть, какие пакеты устарели. я сделал cabal install те. Я считаю, что это помогает достичь устойчивого государства быстрее. (Обратите внимание, что sybУстановка не удалась и что cabal install parsec сказал, что с этим нечего делать, когда cabal upgrade сказал по-другому. Так что я оставил эти два пакета в одиночку)

Я подтвердил, что моя настройка в порядке, запустив ghc-pkg check между этапами. Иногда он разрывается, потому что пакет переустанавливается через предыдущую версию с тем же номером версии и пакетами, которые зависели от него необходимо переустановить. Когда это происходит я cabal install Сломанные пакеты снова.

Я также использовал следующую программу, чтобы убедиться, что моя настройка не содержит двух пакетов с той же версией:

import Data.List (sort)
import Data.Maybe (fromJust)
import System.IO (hGetContents)
import System.Process (CreateProcess (std_out), StdStream (CreatePipe), createProcess, shell)

main :: IO ()
main = do
    pkgListRaw <-
        createProcess (shell "ghc-pkg list") { std_out = CreatePipe }
        >>= hGetContents . fromJust . sndOfFourTup
    let pkgListSorted = sort . filter (not . null) $ lines pkgListRaw
    putStrLn .
        unlines . map (dropWhile (== ' ') . fst) .
        filter (uncurry (==)) . zip pkgListSorted $ tail pkgListSorted
    where
        sndOfFourTup (_, x, _, _) = x
  • я cabal installред hlint, yesod, haddock, HDBC-mysql, hakyll и другие пакеты, а затем я cabal installEd предыдущий список снова и снова, пока моя настройка не достигла «стабильного состояния», в котором cabal install не переустанавливает ни одного из них.

  • Я проверил, что мои собственные программы я работаю сейчас, компилируйте и работаю. Все, кажется, хорошо сейчас

Примечания:

  • Я не мог получить платформу Haskell 2010.1.0.1 на работу. Вещи работали только для меня после того, как я улучшился до GHC 6.12.3. По иронии судьбы (?), Это касается рекомендации на странице загрузки GHC:

Останавливаться!

Для большинства пользователей мы рекомендуем устанавливать платформу Haskell вместо GHC. Текущий выпуск платформы Haskell включает в себя недавний релиз GHC, а также некоторые другие инструменты (такие как Cabal), а также больший набор библиотек, которые, как известно, работают вместе.

  • Эта работа - вокруг, вероятно, прорвется как в будущем. Я думаю, что это, вероятно, произойдет через несколько месяцев. Основная библиотека, как random будет обновляться, а затем проблемы зависимости начнут разгадать снова. Тогда я / вам придется провести время на получение наших установок. Возможно, тогда это потребует обновления до более нового GHC. Но кто знает, может быть, тогда будет более старый релиз, который станет стабильным, поскольку пакеты Hackage обновляются для решения проблем связанных с зависимостью. Как вам услугу, я буду обновлять этот вопрос и ответ, когда придет время. (Предполагая, что другие тоже имеют эту проблему. До сих пор я проверил, что Саймон Марлоу и Пик также сталкиваются с этой проблемой)

  • Способы узнать, что ваша настройка Haskell сломана (если кто-то из них правда, то настройка сломана):

    • Ничего не работает
    • ghc-pkg check говорит, что это сломано
    • Краткая программа, источник которого я вложил в этот ответ выше, обнаруживает, что у вас есть пакет, установленный дважды с той же версией
    • cabal update а затем цикл cabal installСписок пакетов, которые я писал выше, или другой список (предпочтительно большой с большим количеством зависимостей). Если вы никогда не достигаете стабильного состояния (итерация цикла всегда что-то переноса), то ваша настройка сломана. ПРЕДУПРЕЖДЕНИЕ: Этот шаг может разрушить вашу функционирующую настроек HASKELL. Делайте это, если вы Maso-любопытный или готов исправить вашу настройку после того, как он разрывается (процесс, который может быть трудоемким)
  • Я хотел бы знать, нарушены ли ваши настройки или работают. Это может помочь мне. Например, если мы обнаружим, что настройки GHC 6.10 работают нормально, я / ты мог бы порекомендовать эти настройки людям по случаю рекомендации кому-то, чтобы попробовать Haskell и т. Д.

Я надеюсь, что это помогает другим лицом к тому же или подобным проблемам. Большое спасибо Саймону Марлоу и Джону!

Другие советы

Пожалуйста, сделай

ghc-pkg check

И если это не показывает ошибок, давайте посмотрим на вывод из

ghc-pkg list -v

а также

cabal install random -v

Редактировать: Я могу воспроизвести вашу проблему с GHC 6.12.1, но не с 6.12.2, используя ровно одинаковую версию Cabal-install (0.8.0). Я посмотрю в это.

Редактировать 2: сообщается как ошибка в Cabal-install.

У меня есть два возможных решения, оба из которых несколько опасны, но помогут вам получить работающую установку.Я рад, что Саймон следит за этим, потому что мне это кажется какой-то ошибкой.Чтобы получить работающую установку, я бы сначала попробовал следующее:

ghc-pkg unregister random

затем выполните случайный список ghc-pkg, чтобы увидеть, что установлено.Я предполагаю (но не уверен), что у вас все еще будет версия /Library/Frameworks (из Платформы), но недавно установленная версия исчезнет.Если это так, перейдите к следующему шагу.Если это не так, вам, вероятно, придется выполнить чистую переустановку платформы.

Предполагая, что случайная платформа все еще присутствует, сделайте следующее:

cabal unpack random

перейдите в каталог, в который он распакован, и отредактируйте файл .cabal, увеличив версию до 1.0.0.2.1 (добавьте еще одно поле и увеличьте его на единицу).Затем установите Cabal из этого каталога, и он должен установить новый случайный файл.Поскольку у него другая версия, чем у платформы Random, они могут безопасно сосуществовать.

Вместо отмены регистрации ghc-pkg вы можете напрямую удалить файл регистрации из

/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d

к имени файла будет добавлен хэш, поэтому вам нужно будет просмотреть содержимое каталога, чтобы получить значение.Просто удалите файл, и с этого момента ghc-pkg и cabal его не увидят.Это не затронет установку платформы (поэтому в этом смысле это безопаснее), но все еще существует вероятность того, что другие установленные пакеты будут затронуты.После этого вы можете переустановить случайный пакет, распаковав и увеличив версию, как указано выше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top