Я думаю, что я понимаю PHOAS (параметрический абстрактный синтаксис более высокого порядка) и я вижу, как можно красиво напечатать выражение (см. http://www.reddit.com/r/haskell/comments/1mo59h/phoas_for_free_by_edward_kmett/ccbxzoo).
Но - я не вижу, как создать парсер для таких выражений, например, принимает "(lambda (a) a)"
и строит (значение Haskell, соответствующее) lam $ \ x -> x
. (И он должен использовать Text.Parsec или аналогичный.)
Я могу построить парсер, который вырабатывает лямбда-термины с индексированием de-Bruijn, но что бы это помогло?