2015-11-18 2 views
4

Чтобы использовать расширение языка, такие как UnicodeSyntax во всех файлах проекта, 2 варианта:Расширения языка Haskell: флаг pragma против компилятора?

  • Прагма в каждом исходном файле: {-# LANGUAGE UnicodeSyntax #-}
  • Добавление extensions: UnicodeSyntax в каждой секции (библиотека, исполняемый файл, тест) файла .cabal.

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

Я использую stack и их стандарт new-template для простых пакетов.

+2

Обратите внимание, что вы можете быть выборочным: для каждого исходного файла вы можете активировать различные расширения ... –

+0

Кроме того: вы используете «Makefile»? –

+0

Согласовано @CommuSoft, но если я использую расширение во всех файлах, флаг компилятора, похоже, уменьшит дублирование. Мне интересно, хотя флаг компилятора - это некая плохая практика. –

ответ

4

Лично я всегда перечисляю все языковые расширения в каждом файле, который их использует. Затем вы можете точно указать, какие расширения использует конкретный фрагмент кода, просто просмотрев код. Это означает, что я могу сразу сказать, например, что этот код делает что-то с Template Haskell или нет. И мне не нужно смотреть на какие-либо связанные файлы, чтобы понять это. Это также означает, что я могу скомпилировать именно этот модуль вручную из командной строки без необходимости запоминать, какие расширения мне нужны.

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

+1

Было бы неплохо иметь секцию 'required-extensions' для cabal, чтобы она не срабатывала/предупреждала, если модуль запрашивает расширение, не включенное в список, и предупреждает, если сборка завершена, и указанное расширение никогда не запрашивалось. – dfeuer

Смежные вопросы