Вы все еще можете использовать extensions: DeriveFunctor
в своем .cabal файле. Да, это не расширение, которое в настоящее время известно Cabal, но вы все равно можете его использовать, и пока компилятор узнает его, он будет работать. Действительно, Cabal проверит, что компилятор распознает расширение, хотя Cabal сам не знает об этом.
В модуле Language.Haskell.Extension
имеется центральный реестр расширений. Цель этого реестра состоит в том, чтобы разные компиляторы могли согласовать одни и те же имена при реализации тех же расширений. В прошлом у нас были случаи, когда авторы разных компиляторов случайно приводили разные имена к одной и той же концепции расширения. Не все расширения должны быть зарегистрированы. Имеет смысл не регистрировать расширения, которые все еще весьма экспериментальны, например расширения DPH «PArr» до сих пор не зарегистрированы. Hackage требует, чтобы все загруженные пакеты использовали только известные зарегистрированные расширения, что имеет смысл, поскольку, если расширение достаточно готово для использования в распределенном пакете, тогда это нормально для регистрации.
В этом конкретном случае разработчики GHC, похоже, забыли зарегистрировать расширение.
Следует также отметить, что по состоянию на Кабаль-1.10 поле extensions
делится на два: default-extensions
и other-extensions
. Это касается вопроса, который Джон указывает в своем ответе, что предыдущее поведение состоит в том, что все расширения активны для всех модулей, которые, как мы признаем, являются ошибкой. Поле other-extensions
позволяет перечислять расширения, используемые в некоторых модулях (т. Е. С праймой LANGUAGE
). Cabal в конечном итоге введет в действие, что все они перечислены, так же как и все перечисленные зависимости пакетов. Языковые зависимости также зависят.
В какой версии платформы GHC или Haskell вы используете> –
Дополнительная информация о версии добавлена. –
Я не знаю об этом конкретном предупреждении, но я думаю, что добавление прагмы LANGUAGE внутри файла - наилучший вариант. –