Бессмысленный стиль в шаблоне Haskell - PullRequest
4 голосов
/ 24 февраля 2012

Рассмотрим следующую функцию Template Haskell:

composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]

Можно ли исключить лямбда-выражение из правой части уравнения и написать composeQ, используя стиль без точек?

1 Ответ

4 голосов
/ 24 февраля 2012

Нет общего способа объединить выражения в любую цитату в стиле без точек, но этот конкретный случай может быть реализован так:

composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = flip infixApp [|(.)|]

Здесь было выполнено обратное отображение infixApp, которое обычно принимает параметры порядка left op right в op left right и затем снабжает его оператором композиции. Теперь у нас есть функция без точек, которая эквивалентна оригинальной composeQ.

...