Бесточечный стиль в Template Haskell

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

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

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


person Kelly Westbrooks    schedule 24.02.2012    source источник


Ответы (1)


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

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

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

person shang    schedule 24.02.2012