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

StackOverflow https://stackoverflow.com/questions/801785

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

  • Классы типов с несколькими параметрами
  • Переменные ограниченного типа
  • Типы более высокого ранга
  • Обобщенные алгебраические типы данных (GADT)

Из них наиболее важным являются классы типов с несколькими параметрами.

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top