私はGHCに拡張機能を使用するように言われた経験を数回経験しましたが、その拡張機能を使用すると、単純なリファクタリングでHaskell 98(現在は 201 )そしてより簡単な解決策があります。
一方、GADTまたはRank2Types(まれにRankNTypes)を使用すると、作業量が大幅に減り、コードがよりクリーンになる場合もあります。
一般的に、より良い設計の可能性を曖昧にする傾向がある拡張機能と、それを改善する拡張機能はどれですか?両方を行うものがある場合、その拡張機能を使用することを決定する前に、ユーザーは何を探す必要がありますか(意図しているソリューションが正しいかどうかを確認してください)。
道徳的に「良い」拡張と道徳的に「悪い」拡張のアドホックリスト-これは審美的な判断です!
良い
悪い
醜い(しかし必要)
わからない