GHC に拡張機能を使用するように指示された経験が数回ありますが、その拡張機能を使用するとコードがはるかに複雑になり、単純なリファクタリングで Haskell 98 (現在は2010 )、より簡単な解決策があります。
一方、GADT や Rank2Types (RankNTypes はめったにありません) を使用すると、作業が大幅に減り、コードがよりクリーンになる場合もあります。
一般に、より良い設計の可能性を曖昧にする傾向があるのはどの拡張機能で、一般的にそれを改善するのはどれですか? 両方を行うものがある場合、その拡張機能を使用することを決定する前に、ユーザーは何を探す必要がありますか (意図しているソリューションに当てはまるかどうかを確認します)。
( GHC Haskell 拡張機能を使用する必要があるかどうかも参照してください。 )