質問
Haskellを学習していると、実際のコードで使用される言語拡張。初心者として、私はそれらを使用することを学ぶ必要がありますか、それとも私はそれらをすべての費用で避けるべきですか? Haskell  98との互換性が損なわれ、コードがほとんどGHCのみに制限されることがわかります。ただし、Hackageでパッケージを参照すると、それらのほとんどがGHCのみであることがわかります。
では、言語拡張機能の使用に対するコミュニティの態度はどのようなものですか?
そして、拡張機能の使用が問題ない場合、“安全に使用できる拡張機能を区別するにはどうすればよいですか? (次のHaskell標準の一部になる可能性が高いもの)と、主に“実験的な&#8221 ;?たとえば、 -XDisambiguateRecordFields 便利で便利ですが、将来サポートされる可能性はありますか?
解決
それなしでは生きていけないGHC拡張機能がいくつかあります。私のお気に入りには
- マルチパラメータ型クラス
- スコープ付きタイプ変数
- 上位型
- 一般化代数データ型(GADT)
これらの中で最も重要なのはマルチパラメーター型クラスです。
一部のGHC拡張機能は非常に推測的で実験的なものであるため、慎重に使用する必要があります。安定した信頼できる拡張機能を特定する良い方法は、 Haskell Primeに含める予定かどうかを確認することです。 。これはHaskell 98の後継となることが期待されています。
2つ目のDon Stewartの提案では、ソースファイルの LANGUAGE
プラグマを使用してすべての拡張子をマークする必要があります。コマンドラインオプションを使用して拡張機能を有効にしない 。
他のヒント
はい、必要に応じて拡張機能を使用します。
ただし、それらを必要とする場合にのみ、意図的に有効にしてください。
これは、モジュールごとに {-#LANGUAGE Rank2Types#-}
を使用して実行します(たとえば)。
一般的に、人々はGHC拡張機能を非常に頻繁に使用します。それらは非常に便利であり、Haskell 98は非常に古いからです。最新の標準があれば、人々はそれに固執するためにもっと努力するかもしれません。
次の標準の提案のステータスは、こちらで確認できます。 。
ここでの他の答えは良いものです。 GHC拡張機能は将来の脆弱性(*)ではないかもしれないと付け加えます。GHCは、最も人気のあるHaskellコンパイラーであり、遠く離れているように思われます。
(*)" future-proof"の反対のように