Можно ли свернуть свой собственный синтаксический сахар (например, do-нотацию или стрелочную нотацию) в Haskell?

Ну, вопрос напрашивается сам собой. Предположим, я хочу реализовать какой-то специальный синтаксис просто для удовольствия. Является ли это возможным? Какие инструменты следует использовать?


person Rafael S. Calsaverini    schedule 27.03.2011    source источник


Ответы (2)


В стандарте Haskell такого метасинтаксиса нет, но он есть в GHC. Вы можете сделать почти любую нотацию, которую хотите, используя средства "квазицитирования" GHC (которые отличаются от средства GHC "Template Haskell").

руководство пользователя GHC на это довольно коротко и в основном указывает на страницу на Quasiquotation вики haskell и домашняя страница, оба они указывают на исходную публикацию: "Почему приятно, когда вас цитируют: квазицитирование для Haskell".

Люди использовали квазицитирование для встраивания синтаксиса XML, регулярных выражений, специальных строковых и текстовых форм, а в «JMacro — это библиотека для программного создания кода Javascript».

person Chris Kuklewicz    schedule 27.03.2011

Я думаю, лучшим способом было бы написать собственный препроцессор. С этого подхода началось несколько синтаксических расширений. Например, см.:

  • DrIFt: автоматическое создание экземпляров класса типов.
  • arrowp: препроцессор для обозначения стрелок
  • c2hs: автоматическое создание сортировочной информации и подписей типов для привязок FFI.

и многое другое. Другой способ — пропатчить GHC, но этот подход довольно сложен.

person fuz    schedule 27.03.2011