Является ли DeriveFunctor признанным расширением?Кабал кажется смущенным - PullRequest
7 голосов
/ 23 октября 2010

Кабал дает мне смешанные сообщения.Когда я говорю:

Extensions: DeriveFunctor

Он говорит:

Warning: Unknown extensions: DeriveFunctor

Но когда я говорю:

GHC-Options: -XDeriveFunctor

Он говорит:

Warning: Instead of 'ghc-options: -XDeriveFunctor' use 'extensions:
DeriveFunctor'

Пока я просто собираюсь использовать {-# LANGUAGE DeriveFunctor #-} прагму.

$ cabal --version
cabal-install version 0.8.2
using version 1.8.0.6 of the Cabal library 
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.12.3
$ basename $(mdfind haskell-platform | grep .dmg)
haskell-platform-2010.2.0.0.i386.dmg

Ответы [ 2 ]

7 голосов
/ 25 октября 2010

Вы все еще можете использовать extensions: DeriveFunctor в своем файле .cabal.Да, это не расширение, которое в настоящее время известно Cabal, но вы все равно можете использовать его, и пока компилятор распознает его, оно будет работать.Действительно, Cabal проверит, что компилятор распознает расширение, даже если Cabal сам не знает об этом.

В модуле Language.Haskell.Extension имеется центральный реестр расширений.Назначение этого реестра состоит в том, что разные компиляторы могут согласовывать одни и те же имена, когда они реализуют одни и те же расширения.В прошлом были случаи, когда авторы разных компиляторов случайно давали разные имена одной и той же концепции расширения.Не все расширения должны быть зарегистрированы.Имеет смысл не регистрировать расширения, которые все еще являются экспериментальными, например, расширения DPH "PArr" все еще не зарегистрированы.Hackage требует, чтобы все загруженные пакеты использовали только известные зарегистрированные расширения, что имеет смысл, поскольку, если расширение достаточно готово для использования в распределенном пакете, тогда можно зарегистрироваться.

В этом конкретном случае GHCКажется, разработчики забыли зарегистрировать расширение.

Стоит также отметить, что начиная с Cabal-1.10 поле extensions делится на два: default-extensions и other-extensions.Это решает проблему, на которую Джон указывает в своем ответе, что предыдущее поведение состоит в том, что все расширения активны для всех модулей, что мы признаем ошибкой.Поле other-extensions позволяет перечислять расширения, используемые в некоторых модулях (т. Е. С прагмой LANGUAGE).Cabal в конечном итоге принудит к тому, что они все перечислены, точно так же, как это требует, чтобы все зависимости пакетов были перечислены.Языковые зависимости тоже являются зависимостями.

4 голосов
/ 23 октября 2010

Согласно документации Hackage , по состоянию на Cabal-1.8.0.6 DeriveFunctor не распознается. Это относительно новое дополнение к GHC, и оно не имеет широкого применения, поэтому я не удивлен, что это упустили бы из-за Cabal. Вероятно, это следует подать как ошибку (запрос функции?) Против Cabal.

@ Том Локхорст прав, что прагма ЯЗЫК - лучший вариант. Мне не нравится использовать поле Расширений Cabal, потому что тогда все расширения активны для всех модулей, которые я часто не хочу.

...