Soll ich GHC Haskell-Erweiterungen verwenden oder nicht?

78

Während ich Haskell lerne, sehe ich, dass im realen Code viele Spracherweiterungen verwendet werden. Sollte ich als Anfänger lernen, sie zu benutzen, oder sollte ich sie um jeden Preis vermeiden? Ich sehe, dass es die Kompatibilität mit Haskell 98 unterbricht und den Code auf so ziemlich nur GHC beschränkt. Wenn ich jedoch Pakete auf Hackage durchsuche, sehe ich, dass die meisten sowieso nur GHC sind.

Wie steht die Community zur Verwendung von Spracherweiterungen?

Und wenn die Verwendung von Erweiterungen in Ordnung ist, wie kann ich Erweiterungen, die ich "sicher" verwenden kann (diejenigen, die wahrscheinlich Teil des nächsten Haskell-Standards werden), von denen unterscheiden, die meistens "experimentell" sind? Ich nehme zum Beispiel an, dass -XDisambiguateRecordFields nett und nützlich ist, aber wird es wahrscheinlich in Zukunft unterstützt?

Sastanin
quelle
Ich persönlich mache mir keine Sorgen um diese Kompatibilität. GHC ist so gut, dass es Mainstream ist - selbst für Leute, die sich einfach weigern, sich einem Mainstream anzupassen (Haskellers).
MasterMastic

Antworten:

70

Es gibt einige GHC-Erweiterungen, die zu gut sind, um ohne zu leben. Zu meinen Favoriten gehören

  • Klassen mit mehreren Parametern
  • Gültigkeitsbereichsvariablen
  • Höherrangige Typen
  • Generalisierte algebraische Datentypen (GADTs)

Von diesen sind Multiparameter-Typklassen die wirklich wesentliche.

Einige GHC-Erweiterungen sind sehr spekulativ und experimentell, und Sie sollten sie mit Vorsicht verwenden. Eine gute Möglichkeit, eine stabile und vertrauenswürdige Erweiterung zu identifizieren, besteht darin, zu prüfen, ob sie in Haskell Prime aufgenommen werden soll , das hoffentlich der Nachfolger des Haskell 98 sein wird.

Ich stimme Don Stewarts Vorschlag zu, dass jede Erweiterung mit dem LANGUAGEPragma in der Quelldatei markiert werden sollte . Nicht ermöglichen Erweiterungen Befehlszeilenoptionen.

Norman Ramsey
quelle
2
Vielen Dank! Ich vermeide Befehlszeilenoptionen, um Erweiterungen zu aktivieren.
Sastanin
51

Ja, verwenden Sie gegebenenfalls Erweiterungen.

Aber stellen Sie sicher, dass Sie sie absichtlich aktivieren - nur wenn Sie sich entscheiden, dass Sie sie brauchen. Tun Sie dies auf Modulbasis über {-# LANGUAGE Rank2Types #-}(zum Beispiel).

Don Stewart
quelle
19

Im Allgemeinen verwenden die Leute GHC-Erweiterungen ziemlich häufig, weil sie so nützlich sind und Haskell 98 ziemlich alt ist. Sobald es einen aktuelleren Standard gibt, können sich die Leute mehr Mühe geben, sich daran zu halten.

Den Status der Vorschläge für den nächsten Standard finden Sie hier .

GS - Entschuldige dich bei Monica
quelle
Vielen Dank für die Antwort und den Link. Ich nehme an, abgelehnte Vorschläge sind zu vermeiden.
Sastanin
Nun, es kann eine ganze Reihe von Gründen für die Ablehnung geben. Wenn Sie also wirklich etwas verwenden möchten, gehen Sie ein bisschen mehr in die Details. Aber es ist eine gute Faustregel.
GS - Entschuldigen Sie sich bei Monica
5

Die anderen Antworten hier sind gut. Ich würde hinzufügen, dass GHC-Erweiterungen nicht so zukunftsfähig sind (*), wie sie sein könnten, da GHC bei weitem der beliebteste Haskell-Compiler zu sein scheint, und ich sehe, dass sich dies nicht bald ändert.

(*) wie im Gegenteil von "zukunftssicher"

Phil Darnowsky
quelle