64

GHC に拡張機能を使用するように指示された経験が数回ありますが、その拡張機能を使用するとコードがはるかに複雑になり、単純なリファクタリングで Haskell 98 (現在は2010 )、より簡単な解決策があります。

一方、GADT や Rank2Types (RankNTypes はめったにありません) を使用すると、作業が大幅に減り、コードがよりクリーンになる場合もあります。

一般に、より良い設計の可能性を曖昧にする傾向があるのはどの拡張機能で、一般的にそれを改善するのはどれですか? 両方を行うものがある場合、その拡張機能を使用することを決定する前に、ユーザーは何を探す必要がありますか (意図しているソリューションに当てはまるかどうかを確認します)。

( GHC Haskell 拡張機能を使用する必要があるかどうかも参照してください。 )

4

1 に答える 1

56

道徳的に「良い」拡張機能と道徳的に「悪い」拡張機能のアドホックなリスト - これは審美的な判断です!

いいもの

  • GADT
  • 並列リスト内包表記
  • パターンガード
  • モナド内包表記
  • タプルセクション
  • ワイルドカードを記録する
  • 空のデータ宣言
  • 実存型
  • 一般化された新しいタイプの派生
  • MPTC + FD
  • タイプファミリー
  • 明示的な定量化
  • 上位多型
  • レキシカルスコープのtyvar
  • 前髪パターン

悪い人

  • SQL 内包表記
  • 暗黙的なパラメーター

醜い(しかし必要)

  • テンプレート Haskell
  • ボックス化されていない型とタプル
  • 判断不能、重複、一貫性のないインスタンス - 通常、設計ミスがあることを意味します。

わからない

  • アロー表記
  • パターンを見る
于 2012-06-01T11:54:03.147 に答える