Должен ли я использовать расширения GHC Haskell или нет?

Изучая Haskell, я вижу, что в реальном коде используется множество языковых расширений. Как начинающему, я должен научиться использовать их, или я должен избегать их любой ценой? Я вижу, что это нарушает совместимость с Haskell 98 и ограничивает код только GHC. Однако, если я просматриваю пакеты на Hackage, я вижу, что большинство из них в любом случае только для GHC.

Итак, каково отношение сообщества к использованию языковых расширений?

И если использование расширений в порядке, как я могу отличить расширения, которые я могу использовать "безопасно" (те, которые могут стать частью следующего стандарта Haskell) от тех, которые в основном являются "экспериментальными"? Например, я предполагаю, что -XDisambiguateRecordFields хорош и полезен, но вероятно ли это будет поддерживаться в будущем?

4 ответа

Решение

Есть некоторые расширения GHC, без которых слишком хорошо жить. Среди моих любимых

  • Классы многопараметрического типа
  • Переменные типа Scoped
  • Типы высшего ранга
  • Обобщенные алгебраические типы данных (ГАДЦ)

Из них действительно важным является классы многопараметрического типа.

Некоторые расширения GHC очень умозрительны и экспериментальны, и вы можете использовать их с осторожностью. Хороший способ определить стабильное и доверенное расширение - посмотреть, планируется ли его включение в Haskell Prime, который, как ожидается, станет преемником Haskell 98.

Я второе предложение Дона Стюарта о том, что каждое расширение должно быть отмечено с помощью LANGUAGE Прагма в исходном файле. Не включайте расширения, используя параметры командной строки.

Да, используйте расширения соответствующим образом.

Но обязательно включите их намеренно - только когда вы решите, что они вам нужны. Сделайте это на основе модуля через {-# LANGUAGE Rank2Types #-} (например).

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

Вы можете найти статус предложений для следующего стандарта здесь.

Другие ответы здесь хорошие. Я бы добавил, что расширения GHC не так уязвимы для будущего (*), как они могли бы быть, потому что GHC, похоже, является самым популярным компилятором Haskell, и я не вижу, что это скоро изменится.

(*) как в противоположность "на будущее"

Другие вопросы по тегам