РЕДАКТИРОВАТЬ ДЛЯ БУДУЩИХ ДУШ, НАТЯГИВАЮЩИХСЯ НА ЭТО:
Было бы неразумно копировать какие-либо из моих команд ниже, не выполнять их. Просто ознакомьтесь с ответом Зетов, почему я подошел к этому неправильно.
ИСХОДНЫЙ ВОПРОС
Моя песочница, кажется, попадает в глобальную версию некоторых пакетов, а не использует версии песочницы. Я просмотрел SO в поисках ответов на этот вопрос, и на многие вопросы даны ответы без конкретных инструкций по решению этой проблемы или они немного отличаются, поэтому я не могу запустить свою настройку. Вот что у меня есть:
1. Version of cabal is old:
$ cabal --v
cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library
О боже, это старо и не будет запускать песочницу.
2. Install cabal with cabal
$ cabal install cabal
Resolving dependencies...
Downloading Cabal-1.22.6.0...
...lots of stuf...
Registering Cabal-1.22.6.0...
Installed Cabal-1.22.6.0
Выглядит неплохо.
3. Try it out:
$ cabal sandbox init
cabal: unrecognised command: sandbox (try --help)
Хм.
$ which cabal
/usr/bin/cabal
Ах.
$ ${HOME}/.cabal/bin/cabal --version
cabal-install version 1.22.2.0
using version 1.22.2.0 of the Cabal library
Ага.
$ export PATH="${HOME}/.cabal/bin/:$PATH"
$ export PATH="${HOME}/.cabal/libs/:$PATH"
$ cabal --v
cabal-install version 1.22.2.0
Здорово.
4. Try it out again:
$ cabal sandbox init
Writing a default package environment file to
.../cabal.sandbox.config
Creating a new sandbox at .../.cabal-sandbox
$ cabal install Frames
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: Frames-0.1.2.1 (user goal)
next goal: base (dependency of Frames-0.1.2.1)
rejecting: base-4.6.0.1/installed-8aa... (conflict: Frames => base>=4.7 &&
<4.9)
rejecting: base-4.8.2.0, 4.8.1.0, 4.8.0.0, 4.7.0.2, 4.7.0.1, 4.7.0.0, 4.6.0.1,
4.6.0.0, 4.5.1.0, 4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0, 4.3.0.0, 4.2.0.2,
4.2.0.1, 4.2.0.0, 4.1.0.0, 4.0.0.0, 3.0.3.2, 3.0.3.1 (global constraint
requires installed instance)
Dependency tree exhaustively searched.
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.
Ага, значит база не совместима, ладно.
$ cabal install base --reinstall
Resolving dependencies...
cabal: Could not resolve dependencies:
next goal: base (user goal)
rejecting: base-4.8.2.0, 4.8.1.0, 4.8.0.0, 4.7.0.2, 4.7.0.1, 4.7.0.0, 4.6.0.1,
4.6.0.0, 4.5.1.0, 4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0, 4.3.0.0, 4.2.0.2,
4.2.0.1, 4.2.0.0, 4.1.0.0, 4.0.0.0 (only already installed instances can be
used)
rejecting: base-3.0.3.2 (conflict: base => base>=4.0 && <4.3)
rejecting: base-3.0.3.1 (conflict: base => base>=4.0 && <4.2)
Dependency tree exhaustively searched.
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.
А как насчет всех зависимостей?
$ cabal install --upgrade-dependencies
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: Frames-0.1.2.1 (user goal)
next goal: base (dependency of Frames-0.1.2.1)
rejecting: base-4.8.2.0, 4.8.1.0, 4.8.0.0, 4.7.0.2, 4.7.0.1, 4.7.0.0 (global
constraint requires installed instance)
rejecting: base-4.6.0.1/installed-8aa... (conflict: Frames => base>=4.7 &&
<4.9)
rejecting: base-4.6.0.1, 4.6.0.0, 4.5.1.0, 4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0,
4.3.0.0, 4.2.0.2, 4.2.0.1, 4.2.0.0, 4.1.0.0, 4.0.0.0, 3.0.3.2, 3.0.3.1 (global
constraint requires installed instance)
Dependency tree exhaustively searched.
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.
Кажется, я не могу переустановить/отменить регистрацию проблемных пакетов. Я хотел бы, чтобы сообщение об ошибке дало мне немного больше информации о том, как это сделать, потому что флаг «--reinstall» был моим лучшим способом.
Ну, он предложил 2 решения, так что давайте попробуем другое, чтобы воссоздать песочницу.
$ cabal sandbox delete
Deleting the sandbox located at .../.cabal-sandbox
$ cabal sandbox init
Writing a default package environment file to
.../cabal.sandbox.config
Creating a new sandbox at .../.cabal-sandbox
$ cabal install --upgrade-dependencies
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: Frames-0.1.2.1 (user goal)
next goal: base (dependency of Frames-0.1.2.1)
rejecting: base-4.8.2.0, 4.8.1.0, 4.8.0.0, 4.7.0.2, 4.7.0.1, 4.7.0.0 (global
constraint requires installed instance)
rejecting: base-4.6.0.1/installed-8aa... (conflict: Frames => base>=4.7 &&
<4.9)
rejecting: base-4.6.0.1, 4.6.0.0, 4.5.1.0, 4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0,
4.3.0.0, 4.2.0.2, 4.2.0.1, 4.2.0.0, 4.1.0.0, 4.0.0.0, 3.0.3.2, 3.0.3.1 (global
constraint requires installed instance)
Dependency tree exhaustively searched.
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.
Это тоже не помогло. Свежие идеи. Как использовать песочницу? Я прочитал здесь, что есть что-то глобальное, что вызывает проблему. Песочницу это не должно беспокоить по дизайну песочницы, верно?
Если это помогает в контексте, я просто пытаюсь запустить демо для фреймов:
https://github.com/acowley/Frames
...который:
$ cabal sandbox init
$ cabal install --dependencies-only -f demos # <-- here
Я вижу, что на этом шаге есть закрытая проблема, но это похоже на другую проблему.
base
тесно связана с версией GHC. Поскольку ваш Cabal — 1.16, я предполагаю, что вы используете GHC 7.6.x, который распространен в старых дистрибутивах Linux LTS (например, Ubuntu 14.04). Вместо этого попробуйте пакетыghc-x.y.z
от hvr (на панели запуска) илиstack
, или иным образом возьмите более новую версию. Если вы не хотите переключать GHC, для фреймов вам потребуется GHC не ниже 7.8.x. - person Zeta   schedule 25.01.2016https://www.haskell.org/platform/#linux-ubuntu
и следую его инструкциям, он говорит мнеhaskell-platform is already the newest version.
- person Mittenchops   schedule 25.01.2016haskell-platform
deb (будут перезаписаны только символические ссылки дляghc
и т. д.), и вы можете использовать флаг-w
в кабале, чтобы использовать разные версии GHC (и, следовательно,base
) в проекте кабалы. Но да, вам, вероятно, следует просто использоватьstack
, как предлагают Зеты; похоже, что это гораздо более удобный рабочий процесс, и он может справиться с установкой ghc. - person jberryman   schedule 25.01.2016