2014-01-30 3 views
6

Есть ли какая-либо функция в Haskell, которая, учитывая вход синтаксиса Haskell, возвращает эквивалентное выражение со всем синтаксическим сахаром?Haskell: синтаксис автоматического дежара

Например, в Clojure, я могу передать 'a читателю, и он вернется (quote a), который помогает мне узнать, что ' это только засахаренные форма функции quote.

ответ

8

Haskell Report довольно короткий и охватывает все представляющие интерес преобразования. В частности, вам, вероятно, понравятся разделы по list comprehensions, do syntax и неявный макет (informal, formal).

Вы также можете попросить GHC свалить свое представление о том, как выглядит ваш код с его многочисленными опциями -ddump; в частности, я время от времени смотрю на -ddump-simpl. Однако здесь есть огромная оговорка: отчет не требует, чтобы указанные преобразования были реализованы как фактическая фаза desugaring-to-kernel-Haskell, только то, что реализация должна вести себя так же, как данный десураринг для ядра Haskell , Поэтому GHC берет эту свободу и desugars непосредственно на свой собственный язык; и -ddump-simpl покажут вам термины на этом внутреннем языке, а не в Haskell. С другой стороны, он более совершенен, чем Отчет, в том смысле, что он полностью осведомлен о том, что десуракинг осуществляется любым языковым расширением, которым владеет GHC (в то время как отчет явно не охватывает каких-либо языковых расширений).

Смежные вопросы