Frage Sollte ich GHC Haskell Erweiterungen verwenden oder nicht?


Während ich Haskell lerne, sehe ich, dass es eine Menge gibt Spracherweiterungen im realen Leben Code verwendet. 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 durchbricht und den Code nur auf GHC beschränkt. Wenn ich jedoch Pakete auf Hackage durchsuche, sehe ich, dass die meisten von ihnen nur GHC-only sind.

Also, was ist eine Einstellung der Community gegenüber dem Einsatz 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 solchen unterscheiden, die meistens "experimentell" sind? Zum Beispiel nehme ich das an -XDisambiguateRecordFields ist nett und nützlich, aber wird es wahrscheinlich in der Zukunft unterstützt werden?


75
2018-04-29 10:39


Ursprung


Antworten:


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

  • Multiparameter-Klassen
  • Scoped-Typ-Variablen
  • Höherwertige Typen
  • Generalisierte algebraische Datentypen (GADTs)

Von diesen sind die Multiparameter-Klassen 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 sehen, ob sie für die Aufnahme in Haskell Prime, von dem gehofft wird, der Nachfolger der Haskell 98 zu sein.

Ich stimme Don Stewarts Vorschlag, dass jede Erweiterung mit dem Zeichen markiert werden sollte LANGUAGE Pragma in der Quelldatei. Nicht Aktivieren Sie Erweiterungen mithilfe von Befehlszeilenoptionen.


69
2018-04-29 23:07



Ja, verwenden Sie die Erweiterungen entsprechend.

Aber stellen Sie sicher, dass Sie sie aktivieren absichtlich - nur wenn du entscheidest, dass du sie brauchst. Tun Sie dies pro Modul über {-# LANGUAGE Rank2Types #-} (beispielsweise).


51
2018-04-29 16:13



Im Allgemeinen verwenden Leute GHC-Erweiterungen ziemlich stark, 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, dabei zu bleiben.

Sie können den Status der Vorschläge für den nächsten Standard finden Hier.


19
2018-04-29 12:39



Die anderen Antworten hier sind gute. Ich möchte hinzufügen, dass GHC-Erweiterungen nicht so zukunftsträchtig (*) sind, wie sie sein könnten, denn GHC scheint bei weitem der populärste Haskell-Compiler zu sein, und ich sehe nicht, dass sich das bald ändert.

(*) wie im Gegenteil von "zukunftssicher"


4
2018-05-02 18:31