Gibt es eine Liste von GHC-Erweiterungen, die als "sicher" gelten?

Gelegentlich ist ein Teil des Codes, den ich schreiben möchte, ohne mindestens eine Spracherweiterung nicht legal. Dies gilt insbesondere dann, wenn versucht wird, Ideen in Forschungsarbeiten umzusetzen, bei denen in der Regel die zum Zeitpunkt der Abfassung der Arbeit verfügbare schicke, super-erweiterte Version von GHC verwendet wird, ohne dass klargestellt wird, welche Erweiterungen tatsächlich erforderlich sind.

Das Ergebnis ist, dass ich häufig oben in meinen .hs-Dateien Folgendes erhalte:

{-# LANGUAGE TypeFamilies
           , MultiParamTypeClasses
           , FunctionalDependencies
           , FlexibleContexts
           , FlexibleInstances
           , UndecidableInstances
           , OverlappingInstances #-}

Ich habe nichts dagegen, aber oft habe ich das Gefühl, blind Opfer zu bringen, um den großen Gott von GHC zu besänftigen. Es wird beanstandet, dass ein bestimmtes Stück Code ohne die Spracherweiterung X nicht gültig ist. Deshalb füge ich ein Pragma für X hinzu. Dann wird verlangt, dass ich Y aktiviere, also füge ich ein Pragma für Y hinzu Aktivieren Sie drei oder vier Spracherweiterungen, die ich nicht wirklich verstehe, und ich habe keine Ahnung, welche "sicher" sind.

Um zu erklären, was ich unter "sicher" verstehe:

ich verstehe dasUndecidableInstances ist sicher, da der Compiler zwar möglicherweise nicht beendet wird, der Code jedoch keine unerwarteten Nebenwirkungen hat, solange er kompiliert wird.

Auf der anderen Seite,OverlappingInstances ist eindeutig unsicher, weil es mir sehr leicht fällt, versehentlich Code zu schreiben, der Laufzeitfehler verursacht.

Meine Frage lautet also:

Gibt es eine Liste von GHC-Erweiterungen, die als "sicher" und "unsicher" eingestuft werden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage