У меня был опыт несколько раз, когда GHC сказал мне использовать расширение, только чтобы узнать, что при использовании этого расширения я сделал код намного сложнее, когда простой рефактор позволил мне придерживаться Haskell 98 (теперь 2010) и имеет более прямое решение.
С другой стороны, есть также случаи, когда GADT или Rank2Types (редко RankNTypes) делают намного меньше работы и намного более чистый код.
Какие расширения обычно затушевывают возможность лучшего дизайна и которые обычно улучшают его? Если некоторые из них выполняют оба действия, что должен искать пользователь (убедитесь, что это правда или не соответствует решению, которое они намереваются), прежде чем принимать решение об использовании этого расширения?
(См. также Должен ли я использовать расширения GHC Haskell или нет?)