Можно ли свернуть свой собственный синтаксический сахар (например, do-notation или arrow-notation) в Haskell? - PullRequest
19 голосов
/ 27 марта 2011

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

Ответы [ 2 ]

17 голосов
/ 27 марта 2011

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

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

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

8 голосов
/ 27 марта 2011

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

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

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

...