Какие расширения Haskell (GHC) должны использовать/избегать пользователи?


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

с другой стороны, есть также случаи, когда GADT или Rank2Types (редко RankNTypes) делают гораздо меньше работы и гораздо более чистый код.

Что расширения, как правило, скрывают возможность лучшего дизайна, и которые в целом улучшают его? Если есть некоторые, которые делают и то, и другое, что должен искать пользователь (убедитесь, что это правда или не правда о решении, которое они намереваются), прежде чем принимать решение об использовании этого расширения?

(см. Также должен ли я использовать расширения GHC Haskell или нет?)

1 60

1 ответ:

специальный список морально " хороших "расширений и морально" плохих " - это эстетическое суждение!

Хорошие

  • Гадц
  • параллельный список понимания
  • Pattern guards
  • выделения монады
  • разделы кортежа!--8-->
  • запись диких карт
  • пустые данные decls
  • экзистенциальных типов
  • обобщенный вывод нового типа
  • MPTCs + FDs
  • семей типа
  • четкое определение
  • полиморфизм более высокого ранга
  • Тивары с лексическим охватом
  • Bang Patterns

Плохой

  • SQL понимания
  • неявных параметров

Некрасиво (но необходимые)

  • Шаблон Haskell
  • распакованные типы и кортежи
  • неразрешимые, перекрывающиеся и несвязные экземпляры-обычно означает, что у вас есть неправильный дизайн.

не уверен

  • нотации стрелой
  • шаблоны вид