Size: a a a

2021 January 03

G

Gradi in Haskell
Добрый день.
Я тут делаю пет прожект в образовательных целях и довольно часто пересобираю его для профилирования (используя cabal configure —enable-profiling && cabal build).
Однако, довольно часто, пересборка падает со случайной ошибкой вида в "в каком-то файле какой-то библиотеке неправильный тип или что-то такое" (т.е. ошибка совсем никакая)
Я излечиваю это с помощью rm -fr ~/.cabal/store , но сборка потом долго длится.
Самое интересное, таких ошибок совсем не бывает когда собираю проект с выключенным профилированием.
Гугл дал две ссылки (раз, два), но они старые. Не уверен, что сейчас актуально.

Собственно вопрос: Что я делаю не так? Удалять периодически store это нормально?

Окружение:
ArchLinux x64
ghc —version = 8.10.3
cabal —version = 3.2.0
ghcup-hs —version = 0.1.12

Весь хаскель у меня установлен по сути в ~/.ghcup ~/.cabal (отдельные причины почему)
источник

JS

Jerzy Syrowiecki in Haskell
Gradi
Добрый день.
Я тут делаю пет прожект в образовательных целях и довольно часто пересобираю его для профилирования (используя cabal configure —enable-profiling && cabal build).
Однако, довольно часто, пересборка падает со случайной ошибкой вида в "в каком-то файле какой-то библиотеке неправильный тип или что-то такое" (т.е. ошибка совсем никакая)
Я излечиваю это с помощью rm -fr ~/.cabal/store , но сборка потом долго длится.
Самое интересное, таких ошибок совсем не бывает когда собираю проект с выключенным профилированием.
Гугл дал две ссылки (раз, два), но они старые. Не уверен, что сейчас актуально.

Собственно вопрос: Что я делаю не так? Удалять периодически store это нормально?

Окружение:
ArchLinux x64
ghc —version = 8.10.3
cabal —version = 3.2.0
ghcup-hs —version = 0.1.12

Весь хаскель у меня установлен по сути в ~/.ghcup ~/.cabal (отдельные причины почему)
вы используете cabal.project?
источник

JS

Jerzy Syrowiecki in Haskell
если нет, попробуйте
источник

G

Gradi in Haskell
Jerzy Syrowiecki
вы используете cabal.project?
Не очень понял.
Я создал проект с помощью cabal init. Это оно?
источник

JS

Jerzy Syrowiecki in Haskell
cabal init создаёт только пакет
источник

JS

Jerzy Syrowiecki in Haskell
это можно назвать неформально проектом, но у него нет всех достоинств cabal.project
источник

JS

Jerzy Syrowiecki in Haskell
источник

JS

Jerzy Syrowiecki in Haskell
cabal.project описывает отдельное окружение для сборки, которое решает ту проблему, с которой вы начали
источник

G

Gradi in Haskell
Jerzy Syrowiecki
cabal.project описывает отдельное окружение для сборки, которое решает ту проблему, с которой вы начали
Честно говоря, всё еще не понял, как этот файл может помочь. Я почитал вашу ссылку и большинство параметров которые можно указать в cabal.project можно указать через cabal configure и эта команда сохранит эти параметры в cabal.project.local файл который у меня уже есть.
источник

G

Gradi in Haskell
Gradi
Честно говоря, всё еще не понял, как этот файл может помочь. Я почитал вашу ссылку и большинство параметров которые можно указать в cabal.project можно указать через cabal configure и эта команда сохранит эти параметры в cabal.project.local файл который у меня уже есть.
Более того. Я хотел было использовать sandbox'ы, но судя по этой ссылке https://github.com/haskell/cabal/issues/6445 они удалены и сейчас cabal должен уметь разруливать ситуации, когда разные пакеты требуют разные версии одного и того же пакета. Хоть я и не уверен имеет ли это значение в случае моей проблемы.
источник

JS

Jerzy Syrowiecki in Haskell
если я правильно понимаю, если в проекте есть файл cabal.project, временные файлы кладутся в песочницу
источник

JS

Jerzy Syrowiecki in Haskell
если файла нет, всё сваливается в ~/.cabal
источник

G

Gradi in Haskell
Jerzy Syrowiecki
если я правильно понимаю, если в проекте есть файл cabal.project, временные файлы кладутся в песочницу
Попробую с ним.
А cabal.project надо комитить?
источник

JS

Jerzy Syrowiecki in Haskell
Gradi
Попробую с ним.
А cabal.project надо комитить?
да
источник

G

Gradi in Haskell
Jerzy Syrowiecki
если я правильно понимаю, если в проекте есть файл cabal.project, временные файлы кладутся в песочницу
Добавил cabal.project вида:
packages: .
extra-packages: base
         , optparse-applicative
         , mongoDB
         , text
         , mtl
         , containers
         , bytestring
         , time
         , blaze-html
         , blaze-markup
         , prettyprinter
         , deepseq
Удалил ~/.cabal/store, но после пересборки ~/.cabal/store опять появился со всеми пакетами.
Не похоже, чтобы кабал песочнику включил.
источник

JS

Jerzy Syrowiecki in Haskell
Gradi
Добавил cabal.project вида:
packages: .
extra-packages: base
         , optparse-applicative
         , mongoDB
         , text
         , mtl
         , containers
         , bytestring
         , time
         , blaze-html
         , blaze-markup
         , prettyprinter
         , deepseq
Удалил ~/.cabal/store, но после пересборки ~/.cabal/store опять появился со всеми пакетами.
Не похоже, чтобы кабал песочнику включил.
может, файлы, нужные другим проектам там оседают

а в каталоге проекта каталог с файлами сборки появился?
источник

JS

Jerzy Syrowiecki in Haskell
изначальная проблема с пересборкой решилась?
источник

AA

A64m AL256m qn<co... in Haskell
чет не понял зачем пакеты в проджект файле перечислены?
источник

G

Gradi in Haskell
Jerzy Syrowiecki
может, файлы, нужные другим проектам там оседают

а в каталоге проекта каталог с файлами сборки появился?
dist-newstyle появился.

Изначальная проблема была, что иногда, но не всегда, пересборка падает и надо удалять ~/.cabal/store
Решилась она или нет не могу сказать точно. Сейчас оно собралось.

По сути, я хотел бы понять, как хаскель работает с пакетами и их зависимостями.
Вы же не просто так предложили песочницу. Есть какие-то грабли при работе с пакетами из коробки?
источник

G

Gradi in Haskell
A64m AL256m qn I0
чет не понял зачем пакеты в проджект файле перечислены?
Предполагалось, что cabal build соберёт проект и все его зависимости в dist-newstyle, а не в ~/.cabal/store, но это не сработало.
источник