【问题标题】:Haskell function application replacing parenthesisHaskell 函数应用程序替换括号
【发布时间】:2014-12-21 15:46:47
【问题描述】:

Haskell 新手在这里。我在玩这个表达式:

"The sum of 3 and 4 is " ++ (show (3 + 4))

评估良好。这也很好:

"The sum of 3 and 4 is " ++ (show $ 3 + 4)

但是,当我将最后一对括号替换为 $ 时,出现“输入 $ 解析错误”:

"The sum of 3 and 4 is " ++ $ show $ 3 + 4

我不太清楚为什么。我正在关注 LearnYouAHaskell series,上面写着:

'$ 相当于写一个左括号和 然后在表达式的最右侧写一个结束语。'

我错过了什么?

【问题讨论】:

  • 您在寻找(++) "The sum of 3 and 4 is " $ show $ 3 + 4 吗?
  • 是的,这行得通,谢谢!我想知道为什么它不适用于 ++ 的中缀使用?
  • @xdl 你不能有两个相邻的中缀运算符,它没有很好的定义。 1 + * 2 会是什么?你会怎么解释呢? $ 运算符在 Haskell 中没有什么特别之处,它是一个与其他运算符一样定义的运算符。它只是具有较低的优先级并关联到右侧。
  • @bheklilr $ 周围没有一些编译器魔法吗?我记得在定义自己的$ 实现时出现了一些问题。 Here 是我记得的问题的链接。

标签: haskell


【解决方案1】:

部分应用的中缀运算符需要用括号括起来。所以:

"The sum of 3 and 4 is " ++ $ show $ 3 + 4

失败了,但是...

("The sum of 3 and 4 is " ++) $ show $ 3 + 4

工作得很好。请注意,您也可以使用 (.) 函数来组合函数,如下所示:

("The sum of 3 and 4 is " ++) . show $ 3 + 4

...但稍后会在 learn-you-a-haskell 中介绍。

另外,正如@Shanthakumar 所发布的,这样做可能是可取的:

(++) "The sum of 3 and 4 is " $ show $ 3 + 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2019-06-10
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多