Обиксируйте хорошо распознанное расширение? Cabal кажется запутанным

StackOverflow https://stackoverflow.com/questions/4001749

Вопрос

Cabal дает мне смешанные сообщения. Когда я сказал:

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
Это было полезно?

Решение

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

@Tom lokhorst - это правильно, что языковая прага - лучший вариант. Я не люблю использовать поле расширений Cabal, потому что все расширения активны для всех модулей, которые я часто не хочу.

Другие советы

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

В модуле есть центральный реестр расширений в модуле Language.Haskell.Extension. Отказ Цель этого реестра так, чтобы различные компиляторы могли договориться о том же имена, когда они реализуют одинаковые расширения. У нас были случаи в прошлом, где авторы разных компиляторов случайно дали разные имена к тому же концепции расширения. Не все расширения должны быть зарегистрированы. Имеет смысл не регистрировать расширения, которые все еще очень экспериментальные, например, расширения DPH «PARR» все еще не зарегистрированы. HALKAGE Требуется все загруженные пакеты для использования только известных зарегистрированных расширений, что имеет смысл, поскольку если расширение достаточно готово к использованию в распределенном пакете, то это нормально для регистрации.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top