С чистой установкой "Платформы 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
не находит ошибок.
Я опишу обходной путь, который до сих пор работал у меня. Я пробовал много разных вещей, но здесь я описал только ту попытку, которая сработала.
(кстати: я использую Mac OS X 10.6.4, и ваши результаты могут отличаться в разных системах)
/ usr / bin
(для ghc
, ghci
, ghc-pkg
и runhaskell
) в мой предыдущий GHC, который был из установщика Haskell Platform 2010.1.0.1. cabal-install
, используя его сценарий bootstrap.sh
. random
и haskell98
. Отличия только в их файлах .cabal
.
random
до 1.0.0.2.1
и изменил ее зависимость от времени
на time == 1.1. *
haskell98
до 1.0.1.1.1
, и все cabal update
и cabal upgrade
, чтобы узнать, какие пакеты устарели.Я сделал Кабал установил
тех. Я считаю, что это помогает быстрее достичь стабильного состояния. (обратите внимание, что установка syb
не удалась, и что cabal install parsec
сказал, что с этим ничего не поделать, когда cabal upgrade
сказал иначе. Поэтому я оставил эти два пакета в одиночку) Я подтвердил, что моя установка в порядке, выполнив ghc-pkg check
между этапами. Иногда он выходит из строя, потому что пакет переустанавливается поверх предыдущей версии с тем же номером версии, и пакеты, которые от него зависят, необходимо переустановить. Когда это происходит, я клик устанавливаю
сломанные пакеты снова.
Я также использовал следующую программу, чтобы убедиться, что моя установка не содержит двух пакетов с одинаковой версией:
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
I cabal install
ed hlint
, yesod
, hasdock
, HDBC-mysql
, hakyll
и другие пакеты, а затем я cabal install
снова и снова редактировал предыдущий список пока моя установка не достигла «стабильного состояния», в котором cabal install
не переустанавливает ни один из них.
Я проверил, что мои собственные программы, над которыми я сейчас работаю, компилируются и работают. Кажется, теперь все в порядке
Примечания:
Стоп!
Для большинства пользователей мы рекомендуем установить платформу Haskell вместо GHC.Текущий выпуск Haskell Platform включает недавний выпуск GHC, а также некоторые другие инструменты (например, cabal) и более широкий набор библиотек, которые, как известно, работают вместе.
Этот обходной путь, вероятно, тоже когда-нибудь сломается. Думаю, что это, наверное, произойдет через несколько месяцев. Базовая библиотека, такая как random
, будет обновлена, а затем снова начнут обнаруживаться проблемы с зависимостями. Тогда мне / вам придется потратить время на то, чтобы исправить наши настройки. Возможно, тогда потребуется обновление до более нового GHC. Но кто знает, может быть, это будет более старая версия, которая станет стабильной по мере обновления пакетов взлома для решения проблем, связанных с зависимостями. В качестве услуги я обновлю этот вопрос и отвечу, когда придет время. (Предполагая, что у других тоже есть эта проблема. Пока я подтвердил, что Саймон Марлоу и Пикер тоже сталкиваются с этой проблемой)
Способы узнать, что ваша установка Haskell не работает (если что-то из этого верно, то установка нарушена):
Проверка ghc-pkg
говорит, что она не работает cabal update
, а затем цикл cabal install
со списком пакетов, который я написал выше, или другим списком (желательно большим с множеством зависимостей). Если вы никогда не достигнете стабильного состояния (итерация цикла всегда что-то переустанавливает), то ваша установка нарушена. ПРЕДУПРЕЖДЕНИЕ : этот шаг может разрушить вашу текущую работающую установку Haskell.Сделайте это, если вам очень любопытно или вы хотите исправить свою настройку после того, как она сломается (процесс, который может занять много времени) Я хотел бы знать, сломаны ли ваши настройки или работают. Это могло мне помочь. Например, если мы обнаружим, что настройки GHC 6.10 работают нормально,Я / пользователь мог бы порекомендовать эти установки людям по случаю порекомендовать кому-то попробовать Haskell и т. Д.
Я надеюсь, что это поможет другим, сталкивающимся с такими же или подобными проблемами. Большое спасибо Саймону Марлоу и Джону!
Пожалуйста, сделайте
ghc-pkg check
, и если это не покажет ошибок, давайте посмотрим на вывод
ghc-pkg list -v
и
cabal install random -v
Edit : Я могу воспроизвести вашу проблему с GHC 6.12.1, но не с 6.12.2, используя ту же версию cabal-install (0.8.0). Я разберусь с этим.
Правка 2 : сообщается как ошибка в cabal-install.
У меня есть два возможных решения, оба в некоторой степени опасны, но должны дать вам работающую установку. Я рад, что Саймон следит за этим, потому что для меня это звучит как какая-то ошибка. Чтобы получить работающую установку, я бы сначала попробовал следующее:
ghc-pkg unregister random
затем произвольно произвел список ghc-pkg, чтобы увидеть, что установлено. Я предполагаю (но я не уверен), что у вас все еще будет версия / Library / Frameworks (из платформы), но недавно установленная версия исчезнет. В этом случае переходите к следующему шагу. В противном случае вам, вероятно, потребуется выполнить чистую переустановку платформы.
Предполагая, что платформа random все еще присутствует, сделайте следующее:
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 его не увидят. Это не повлияет на установку платформы (так что в этом смысле это безопаснее), но все еще есть потенциал для распространения других установленных пакетов. После этого вы можете переустановить случайный пакет, распаковав и увеличив версию, как указано выше.