Какие расширения Haskell (GHC) следует использовать / избегать пользователям?
У меня уже был опыт, когда GHC говорил мне использовать расширение, только чтобы обнаружить, что при использовании этого расширения я сделал код намного более сложным, когда простой рефакторинг позволил бы мне придерживаться Haskell 98 (теперь 2010) и иметь более простое решение.
С другой стороны, бывают случаи, когда GADT или Rank2Types (редко RankNTypes) делают намного меньше работы и делают код чище.
Какие расширения обычно скрывают возможность улучшения дизайна, а какие вообще улучшают его? Если есть некоторые, которые делают оба, что пользователь должен искать (быть уверенным, что это правда или не правда о решении, которое он намеревается), прежде чем принять решение использовать это расширение?
(См. Также Должен ли я использовать расширения GHC Haskell или нет?)
1 ответ
Специальный список морально "хороших" и морально "плохих" расширений - это эстетическое суждение!
Хорошо
- GADTs
- Параллельные списки
- Выкройка охранников
- Монады понимания
- Разделы кортежа
- Запись джокеров
- Пустые данные decls
- Экзистенциальные типы
- Обобщенный вывод нового типа
- MPTCs + FDs
- Тип семьи
- Явное количественное определение
- Полиморфизм высшего ранга
- Лексически ограниченные тивары
- Образцы взрыва
Плохо
- SQL-понимания
- Неявные параметры
Гадкий (но необходимый)
- Шаблон Haskell
- Распакованные типы и кортежи
- Неразрешимые, перекрывающиеся и несвязные случаи - обычно означает, что у вас неправильный дизайн.
Точно сказать не могу
- Обозначение стрелки
- Посмотреть шаблоны