【问题标题】:Point-free style in Template Haskell模板 Haskell 中的无点样式
【发布时间】:2012-03-14 14:55:52
【问题描述】:

考虑以下模板 Haskell 函数:

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

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

【问题讨论】:

    标签: haskell template-haskell tacit-programming pointfree


    【解决方案1】:

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

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

    这里是翻转infixApp,它通常以left op right 的顺序将参数转换为op left right,然后将其提供给组合运算符。现在我们有了一个等效于原始composeQ 的无点函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多