Какие расширения Haskell (GHC) должны использовать/избегать пользователи?
У меня был опыт несколько раз, когда GHC сказал мне использовать расширение, только чтобы обнаружить, что при использовании этого расширения я сделал код намного сложнее, когда простой рефактор позволил бы мне придерживаться Haskell 98 (теперь 2010) и имеют более прямое решение.
с другой стороны, есть также случаи, когда GADT или Rank2Types (редко RankNTypes) делают гораздо меньше работы и гораздо более чистый код.
Что расширения, как правило, скрывают возможность лучшего дизайна, и которые в целом улучшают его? Если есть некоторые, которые делают и то, и другое, что должен искать пользователь (убедитесь, что это правда или не правда о решении, которое они намереваются), прежде чем принимать решение об использовании этого расширения?
(см. Также должен ли я использовать расширения GHC Haskell или нет?)
1 ответ:
специальный список морально " хороших "расширений и морально" плохих " - это эстетическое суждение!
Хорошие
- Гадц
- параллельный список понимания
- Pattern guards
- выделения монады
- разделы кортежа!--8-->
- запись диких карт
- пустые данные decls
- экзистенциальных типов
- обобщенный вывод нового типа
- MPTCs + FDs
- семей типа
- четкое определение
- полиморфизм более высокого ранга
- Тивары с лексическим охватом
- Bang Patterns
Плохой
- SQL понимания
- неявных параметров
Некрасиво (но необходимые)
- Шаблон Haskell
- распакованные типы и кортежи
- неразрешимые, перекрывающиеся и несвязные экземпляры-обычно означает, что у вас есть неправильный дизайн.
не уверен
- нотации стрелой
- шаблоны вид