Ну, вопрос напрашивается сам собой. Предположим, я хочу реализовать какой-то специальный синтаксис просто для удовольствия. Является ли это возможным? Какие инструменты следует использовать?
Можно ли свернуть свой собственный синтаксический сахар (например, do-нотацию или стрелочную нотацию) в Haskell?
Ответы (2)
В стандарте Haskell такого метасинтаксиса нет, но он есть в GHC. Вы можете сделать почти любую нотацию, которую хотите, используя средства "квазицитирования" GHC (которые отличаются от средства GHC "Template Haskell").
руководство пользователя GHC на это довольно коротко и в основном указывает на страницу на Quasiquotation вики haskell и домашняя страница, оба они указывают на исходную публикацию: "Почему приятно, когда вас цитируют: квазицитирование для Haskell".
Люди использовали квазицитирование для встраивания синтаксиса XML, регулярных выражений, специальных строковых и текстовых форм, а в «JMacro — это библиотека для программного создания кода Javascript».
Я думаю, лучшим способом было бы написать собственный препроцессор. С этого подхода началось несколько синтаксических расширений. Например, см.:
- DrIFt: автоматическое создание экземпляров класса типов.
- arrowp: препроцессор для обозначения стрелок
- c2hs: автоматическое создание сортировочной информации и подписей типов для привязок FFI.
и многое другое. Другой способ — пропатчить GHC, но этот подход довольно сложен.