Должен ли я использовать новые расширения языка Haskell в пользу старых?
При запуске нового проекта Haskell, который нуждается в языковых функциях, предлагаемых как новыми, так и более старыми расширениями, которые я должен использовать? Новый или старый? Например:
Я склоняюсь к более новым, поскольку они чувствуют себя более чистыми, и они добавляют больше возможностей для языка в унифицированной манере. Тем не менее, более старые поддерживают больше компиляторов, они используются в существующих библиотеках и, возможно, также известны среди программистов.
Обновление: Как упоминалось в ответах/комментариях, вышеописанные отношения "вышеперечисленных" не являются полностью точными. Тем не менее, меня интересуют (часто встречающиеся) случаи, когда задача может быть выполнена одинаково хорошо с помощью нескольких расширений.
Ответы
Ответ 1
Короче говоря, да, и по причинам, которые вы заявляете: чище и понятнее.
Иногда я сталкиваюсь с местами, где класс лучше выражается как класс с несколькими параметрами с функциональной зависимостью, потому что вы можете получить больше параметричности более просто таким образом, но обычно ассоциированное семейство типов является более понятным и более гибким способом его подавления. Типичные семейства гораздо более интуитивно понятны функциональному программисту, чем функциональные зависимости.
GADT имеют гораздо более чистый, понятный синтаксис, чем экзистенциальная квантификация, с меньшим количеством концептуальных препятствий, и легко получить нужное поведение.
Я бы рекомендовал использовать новые материалы, если можно, и старые способы, если это необходимо. Эти прекрасные новые расширения могут работать с более высоким профилем.
Ответ 2
"supersede" здесь очень неоднозначно.
Для языковых функций, которые имеют семантику, которая перекрывается с другими функциями, мы можем распознать несколько случаев:
- некоторые функции обобщают существующие
- некоторые предлагают альтернативные подходы
В случае более общих особенностей существуют риски и выгоды. Общность может влиять на многие другие части языка или быть ограничена. В последнем случае выберите общий случай.
Если это выбор между альтернативными подходами, без строгого упорядочения, таких как FD или AT, тогда сложнее дать общие советы.
Итак, в целом, "нет", нет очевидной причины использовать "новые" вещи над "старыми" вещами, когда речь идет о языковых функциях. Они не сортируются таким образом.