Почему инструмент cabal не использует Setup.lhs/Setup.hs?

Я добавил строку putStrLn "Hello" в main функцию моего Setup.lhs и ожидал увидеть ее при запуске cabal configure или cabal build. Но я этого не сделал.

Затем я скомпилировал Setup.lhs с помощью ghc --make и запустил ./Setup configure, и строка была показана.

Если это сделано намеренно, я не вижу смысла в этом и даже нуждаюсь в файле Setup.lhs вообще. Можете ли вы очистить эти вещи от меня?

Ответы

Ответ 1

Скорее всего,

build-type: Simple

в вашем файле .cabal. Если вы выберете тип сборки Simple, вы по существу обещаете, что ваш файл Setup ничего не делает, кроме вызова defaultMain, а двоичный код cabal не будет вызывать его. Если вы хотите, чтобы ваш файл Setup запускался каждый раз, затем измените строку на

build-type: Custom

Вы также спрашиваете о обосновании необходимости в файле Setup в любом случае: на самом деле это не требуется, если вы используете тип сборки Simple. Бинар cabal с радостью сконфигурирует и установит его. Однако считается, что хороший стиль включает в себя файл Setup для любого пакета, поскольку он позволит пользователям устанавливать пакет, у которого есть доступная библиотека cabal, но не инструмент cabal-install (и Hackage обеспечивает наличие a Setup по этой причине).