Рассмотрим следующую функцию Template Haskell:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]
Можно ли исключить лямбда-выражение из правой части уравнения и записать composeQ
в бесточечном стиле?
Рассмотрим следующую функцию Template Haskell:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]
Можно ли исключить лямбда-выражение из правой части уравнения и записать composeQ
в бесточечном стиле?
Не существует универсального способа вставлять выражения в любую цитату в бесточечном стиле, но этот конкретный случай может быть реализован следующим образом:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = flip infixApp [|(.)|]
Здесь были перевернуты infixApp
который обычно принимает параметры в порядке left op right
в op left right
, а затем снабжает их оператором композиции. Теперь у нас есть функция без точек, эквивалентная исходной composeQ
.