【问题标题】:Applicative style for infix operators?中缀运算符的应用风格?
【发布时间】:2012-10-02 02:35:23
【问题描述】:

在处理中缀运算符时,有没有办法让 <$><*> 的应用性使用看起来不错?我认为

((++) <$> a <*> ((++) <$> b <*> c ))

看起来更凌乱了

a ++ b ++ c

所以我想知道是否有更好的方法。

【问题讨论】:

  • 如果都是同一个算子,可以使用foldr1 (liftA2 (++)) [a, b, c]

标签: haskell applicative infix-operator


【解决方案1】:
(<++>) = liftA2 (++)
a <++> b <++> c

liftA2 (++) a $ liftA2 (++) b c

【讨论】:

  • 是的 - 添加另一对尖括号。
【解决方案2】:

请参阅 Thomas Davie 的 InfixApplicative 包,它提供了一个通用的句法技巧,而不必为每次提升定义一个新的运算符。

【讨论】:

  • 文档有点混乱。我认为 OP 的示例将翻译为a &lt;^(++)^&gt; (b &lt;^(++)^&gt; c) --- 你能确认/拒绝吗?
【解决方案3】:

SHE 让你写作

(|a ++ (|b ++ c|)|)

如果这有任何用处。当然,引入预处理层会有一些开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多