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

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

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

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

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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