Бессмысленный стиль в шаблоне Haskell

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам