to post messages and comments.

Яй! cabal-install 1.24.0.0 при помощи cabal init делает самый настоящий Hello, World^WHaskell. Это вроде бы должно снизить порог вхождения для новичков, верно?

а это cabal-library или stack не умеет работать с файлами, у меня периодически VM-ка прибивается OOM-киллером пока stack там что-то собирает (при кабал-инсталл такого не было), так вот с вероятностью практически 1, он убивает свою базу пакетов, что меня очень печалит.

Запиливал проект на ghc-7.10.1.
Думаю, а попробую.
Собираю проект с stack.
stack init --solver # честно выкачивает 7.10.1
stack build
Два часа проходит, и не справляется.

Качаю 7.10.2.
rm -rf stack
Пересобираю stack.
Пересобираю проект cabal + ghc-7.10.2.
Думаю, а попробую.
Собираю проект с stack.
stack init --solver
stack build
Два часа проходит, и не справляется.

Есть докер файл, в нём:

COPY my-project.cabal /opt/server
RUN cd /opt/server && cabal install --dependencies-only

что позволяет мне в случае если зависимости не изменились, а код изменился не пересобирать layer.

Теперь я хочу разбить проект на куски и радостно собирать его stack-ом, но тут возникает засада, ту же самую фишку я уже провернуть не могу, т.к. просто install --dependencies-only там уже нету.

Что делать?

А только у меня не работает --enable-executable-stripping опция?
Включил/выключил в ~/.cabal/config размер бинаря не поменялся.
strip бинарю срезает 10Мб

gist.github.com билд файлик для сборки хаскельного проекта. С созданием шаренного сендбокса и его автообновлением в случе изменения cabal файлов.
Делался для сборки из bamboo.
Может кому ещё пригодится. BTW исправления, дополнения приветствуются.

Мда... cabal нормально не работает без прописанных в PATH путей. Даже если cabal-у указать путь к gcc в конфиге, пакет network не соберется т.к. использует autoconf, а он уже не может без gcc в PATH. Пичаль какая-то :(

как бы скачать все зависимости пакета автоматом?

cabal install --dependencies-only не подходит
сам пакет не установлен, но имеется cabal.config сделанный через cabal freeze --enable-tests

Зачем надо: с поставляемого образа пакет будет ставиться в сетке, где не будет доступа к hackage, соотвественно нужно гарантировать, чтобы сборка не обращалась к hackage.

Я вот не очень понял зачем other-extensions ... Ведь {-# LANGUAGE ExtensionName #-} всё равно надо указывать... Типа чтоб по кабалу определить что в проекте используется?

как получить cabal-1.22 на системе с ghc-7.6 не поломав базу?
Вариант: склонировать cabal, собрать его при помощи ghc Setup.hs .. и т.д. установить его, потом с помощью утановленного cabal сделать песочницу и установить кабал в песочницу, котом удалить ~/.cabal и ~/.ghc выглядит каким-то адом.

Убунтуспецифичный вариант принимается, т.к. в нормальных системах проблема решается проще.

А что хуков для cabal check не бывает?

и куда бы тогда запихнуть дополнительные всякие тесты, типа проверки лицензий изменяемых файлов и прочую дребедень, которую в проекте бы хорошо иметь, но при этом пускать не всегда

а как --enable-library-coverage у cabal работает, оно мержит результаты собранные со всех тестов или нет? если нет, то как автоматизировать? и можно ли summary в .txt получить?

Такое ощущение что sandbox-ы и вообще половина реализации cabal принадлежит знатному извращенцу, возможно конечно были причины именно такого подхода. Но это что-то.. кто не верит попробуйте сделать мегапроект содержащий в себе подпроекты с зависимостями др. на друга, которые нужно пересобирать и запускать их тесты, всё это усложняется тем, что нужно собирать в двух вариантах (с разными настройками окружения и флагами).

такие дела..

Warning: This package indirectly depends on multiple versions of the same
package. This is highly likely to cause a compile failure.
package distributed-process-tests-0.4 requires network-transport-0.3.0.1
package distributed-process-0.4.2 requires network-transport-0.3.0.1
package network-transport-tcp-0.3.1 requires network-transport-0.3.0.1

блин какая-то магия. Делаю всё то же что и в #2522513 , но не в виртуалке. Не хочет собираться, как залипло. Кажет ошибку :

Resolving dependencies...
cabal: Could not resolve dependencies:
trying: AxxonCloud-0.0.1 (user goal)
trying: asn1-types-0.2.1 (dependency of AxxonCloud-0.0.1)
next goal: yesod-platform (dependency of AxxonCloud-0.0.1)
rejecting: yesod-platform-1.2.4.2, 1.2.4.1, 1.2.4 (conflict:
asn1-types==0.2.1, yesod-platform => asn1-types==0.2.0)
rejecting: yesod-platform-1.2.3, 1.2.2, 1.2.1, 1.2.0.1, 1.2.0, 1.1.9.1, 1.1.9,
1.1.8, 1.1.7.2, 1.1.7.1, 1.1.7, 1.1.6.1, 1.1.6, 1.1.5, 1.1.4.1, 1.1.4, 1.1.3,
1.1.2, 1.1.1, 1.1.0, 1.0.6.1, 1.0.6, 1.0.5, 1.0.4.2, 1.0.4.1, 1.0.4, 1.0.3.4,
1.0.3.3, 1.0.3.2, 1.0.2, 1.0.1, 1.0.0, 0.10.3, 0.10.2 (conflict: AxxonCloud =>
yesod-platform>=1.2.4 && <1.3)
Backjump limit reached (change with --max-backjumps).
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.
cabal-meta:
log of commands saved to: /home/yuriy-shelyag/sandboxes/axxoncloud/.shelly/4.txt
Exception: error running: cabal install hashable -fsse41 /home/yuriy-shelyag/sandboxes/axxoncloud/ vendor/starling
exit status: 1
stderr: cabal: Could not resolve dependencies:
trying: AxxonCloud-0.0.1 (user goal)
trying: asn1-types-0.2.1 (dependency of AxxonCloud-0.0.1)
next goal: yesod-platform (dependency of AxxonCloud-0.0.1)
rejecting: yesod-platform-1.2.4.2, 1.2.4.1, 1.2.4 (conflict:
asn1-types==0.2.1, yesod-platform => asn1-types==0.2.0)
rejecting: yesod-platform-1.2.3, 1.2.2, 1.2.1, 1.2.0.1, 1.2.0, 1.1.9.1, 1.1.9,
1.1.8, 1.1.7.2, 1.1.7.1, 1.1.7, 1.1.6.1, 1.1.6, 1.1.5, 1.1.4.1, 1.1.4, 1.1.3,
1.1.2, 1.1.1, 1.1.0, 1.0.6.1, 1.0.6, 1.0.5, 1.0.4.2, 1.0.4.1, 1.0.4, 1.0.3.4,
1.0.3.3, 1.0.3.2, 1.0.2, 1.0.1, 1.0.0, 0.10.3, 0.10.2 (conflict: AxxonCloud =>
yesod-platform>=1.2.4 && <1.3)
Backjump limit reached (change with --max-backjumps).
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.