Должен ли я использовать расширения GHC Haskell или нет? - PullRequest
78 голосов
/ 29 апреля 2009

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

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

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

Ответы [ 4 ]

71 голосов
/ 30 апреля 2009

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

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

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

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

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

51 голосов
/ 29 апреля 2009

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

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

19 голосов
/ 29 апреля 2009

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

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

4 голосов
/ 02 мая 2013

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

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

...