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

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

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

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


person sastanin    schedule 29.04.2009    source источник
comment
Я лично не беспокоюсь об этой совместимости; GHC настолько хорош, что стал мейнстримом — даже для людей, которые просто отказываются подчиняться мейнстриму (хаскеллеры).   -  person MasterMastic    schedule 08.08.2015


Ответы (4)


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

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

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

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

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

person Norman Ramsey    schedule 29.04.2009
comment
Спасибо! Я буду избегать параметров командной строки для включения расширений. - person sastanin; 04.05.2009

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

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

person Don Stewart    schedule 29.04.2009

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

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

person GS - Apologise to Monica    schedule 29.04.2009
comment
Спасибо за ответ и за ссылку. Я полагаю, что отклоненных предложений следует избегать. - person sastanin; 29.04.2009
comment
Ну, может быть довольно широкий спектр причин для отказа, поэтому, если вы действительно хотите что-то использовать, покопайтесь в деталях. Но это хорошее практическое правило. - person GS - Apologise to Monica; 29.04.2009

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

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

person Phil Darnowsky    schedule 02.05.2013