Вы все еще можете использовать 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 в конечном итоге принудит к тому, что они все перечислены, точно так же, как это требует, чтобы все зависимости пакетов были перечислены.Языковые зависимости тоже являются зависимостями.