模板Haskell中的无点样式

时间:2012-02-24 05:42:52

标签: haskell template-haskell tacit-programming pointfree

考虑以下Template Haskell函数:

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

是否可以从等式右边消除lambda表达式并使用无点样式编写composeQ

1 个答案:

答案 0 :(得分:4)

没有通用的方法将表达式拼接成无点样式的任何引号,但这种特殊情况可以像这样实现:

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

以下是翻转infixApp,它通常按left op right的顺序将参数带入op left right,然后将其提供给合成运算符。现在我们有一个与原始composeQ等效的无点函数。