Чи слід використовувати розширення GHC Haskell чи ні?


78

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

Отже, яке ставлення громади до використання мовних розширень?

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


Мене особисто не хвилює ця сумісність; GHC настільки хороший, що є основним - навіть для людей, які просто відмовляються підпорядковуватися загальному (Haskellers).
MasterMastic

Відповіді:


70

Є деякі розширення GHC, надто хороші для життя. Серед моїх улюблених є

  • Класи багатопараметричного типу
  • Змінні типу типу
  • Типи вищого рангу
  • Узагальнені алгебраїчні типи даних (GADT)

З них справді важливим є багатопараметричні типи класів.

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

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


2
Дякую! Я уникатиму параметрів командного рядка, щоб увімкнути розширення.
зустрічі

51

Так, використовуйте розширення відповідно.

Але обов’язково увімкніть їх навмисно - лише тоді, коли ви вирішите, що вони вам потрібні. Робіть це для кожного модуля за допомогою {-# LANGUAGE Rank2Types #-}(наприклад).


19

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

Статус пропозицій щодо наступного стандарту можна знайти тут .


Дякую за відповідь та за посилання. Я вважаю, що відхиленої пропозиції слід уникати.
зустрічі

Що ж, причин для відмови може бути досить широкий, тому, якщо ви дійсно хочете щось використати, копайтеся трохи детальніше. Але це хороше емпіричне правило.
GS - Вибачтесь перед Монікою

5

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

(*) як на протилежність "майбутньому"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.