Frage

Cabal gibt mir gemischte Nachrichten. Wenn ich sage:

Extensions: DeriveFunctor

Dort heißt es:

Warning: Unknown extensions: DeriveFunctor

Aber wenn ich sage:

GHC-Options: -XDeriveFunctor

Dort heißt es:

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

Für jetzt werde ich nur die {-# LANGUAGE DeriveFunctor #-} Pragma verwenden.

$ 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
War es hilfreich?

Lösung

Nach dem Hackage Dokumentation , wie von Cabal-1.8.0.6 DeriveFunctor wird nicht erkannt. Es ist eine relativ neue Ergänzung zu GHC und es scheint nicht weit verbreitet zu haben, so dass ich es wäre nicht überrascht bin seit Cabal übersehen. Dies sollte wahrscheinlich als Fehler eingereicht werden (Feature-Request?) Gegen Cabal.

@ Tom Lokhorst ist richtig, dass eine Sprache Pragma die beste Option ist. Ich weiß nicht wie Cabal Extensions Feld verwenden, weil dann alle Erweiterungen für alle Module aktiv sind, die ich oft nicht wollen.

Andere Tipps

Sie können nach wie vor extensions: DeriveFunctor in Ihrer .cabal Datei verwenden. Ja, es ist keine Erweiterung, die derzeit auf Cabal bekannt ist, aber man kann es immer noch nutzen und solange der Compiler erkennt dann wird es funktionieren. Tatsächlich Cabal prüft, ob der Compiler die Erweiterung nicht erkennt, obwohl Cabal nicht selbst darüber wissen.

Es gibt eine zentrale Registrierung von Erweiterungen im Modul Language.Haskell.Extension. Der Zweck dieser Registrierung ist so, dass verschiedene Compiler auf den gleichen Namen zustimmen können, wenn sie die gleichen Erweiterungen implementieren. Wir haben Fälle in der Vergangenheit haben, wo Autoren von verschiedenen Compilern zufällig verschiedene Namen desselben Erweiterungskonzept gegeben haben. Es müssen nicht alle Erweiterungen registriert werden. Es macht Sinn, nicht-Erweiterungen zu registrieren, die die DPH-Erweiterungen „Parr“ noch sehr experimentell, zum Beispiel sind noch nicht registriert. Hackage alle hochgeladenen Pakete erfordert nur registrierten und Erweiterungen verwendet werden, die da sinnvoll, wenn eine Erweiterung bereit ist, ausreichend in einem verteilten Paket verwendet werden soll, dann ist es in Ordnung, zu registrieren.

In diesem speziellen Fall erscheint die GHC Devs vergessen zu haben, um die Erweiterung zu registrieren.

Es ist auch erwähnenswert, dass, wie von Cabal-1.10 die extensions Feld Aufspaltung in zwei wird: default-extensions und other-extensions. Diese befasst sich mit dem Problem, dass John in seiner Antwort weist darauf hin, dass das vorherige Verhalten ist, dass alle Erweiterungen für alle Module aktiv sind, die wir anerkennen, ist ein Fehler. Das other-extensions Feld ermöglicht die Erweiterungen in einigen Modulen verwendet (das heißt mit dem LANGUAGE pragma) aufgeführt werden. Cabal wird schließlich erzwingen , dass sie alle aufgelistet sind, so wie es erforderlich, dass alle Paketabhängigkeiten aufgeführt sind. Sprachabhängigkeiten sind Abhängigkeiten zu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top