Должен ли я использовать расширения 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, и я не вижу, чтобы это скоро менялось.
(*), как в противоположность "будущему"