При запуске нового проекта Haskell, который нуждается в языковых функциях, предлагаемых как новыми, так и более старыми расширениями, которые я должен использовать? Новый или старый? Например:
- GADTs заменяет ExistentialQuantification.
- TypeFamilies во многих случаях заменяет FunctionalDependencies.
- и т.д.. (если у вас больше примеров, не стесняйтесь добавлять сюда)
Я склоняюсь к более новым, поскольку они чувствуют себя более чистыми, и они добавляют больше возможностей для языка в унифицированной манере. Тем не менее, более старые поддерживают больше компиляторов, они используются в существующих библиотеках и, возможно, также известны среди программистов.
Обновление: Как упоминалось в ответах/комментариях, вышеописанные отношения "вышеперечисленных" не являются полностью точными. Тем не менее, меня интересуют (часто встречающиеся) случаи, когда задача может быть выполнена одинаково хорошо с помощью нескольких расширений.