为啥我们在haskell中编写函数时需要使用括号?

Posted

技术标签:

【中文标题】为啥我们在haskell中编写函数时需要使用括号?【英文标题】:Why do we need to use brackets while composing functions in haskell?为什么我们在haskell中编写函数时需要使用括号? 【发布时间】:2012-05-01 09:50:46 【问题描述】:

假设我需要定义以下函数:

身份 = chr.ord

但是上面的行不行,正确的方法是:

身份 = (chr.ord)

Haskell 通常是一种极简主义的语言,所以使用额外的括号并不自然(对我来说)。

有谁知道引入括号的必要性。我不记得我们在 haskell 中在哪里使用点运算符(除小数外)。

在 Nate/Daniel 的 cmets 之后编辑

你都是对的。我的实际方法是:

nextLetter a 
         | a /= 'z' = chr.ord a
         | a == 'z' = 'a'

现在我明白了,在这种情况下,它将评估 ord a 然后尝试评估 chr.97,因此出现错误!

谢谢。

【问题讨论】:

省略括号并没有错。您可以编辑您的问题并添加您遇到的错误吗? 我认为他的意思是identity x = chr.ord x 这很快,由丹尼尔标记答案,因为它有助于发现错误。 顺便说一句,在这种情况下省略括号的标准方法是写chr . ord $ a chr $ ord a。口味问题。问题显然是chr.ord x 被解析为chr.(ord x),而不是(chr.ord) x 【参考方案1】:

你错了。写的时候

import Data.Char
identity = chr.ord

test.hs 中并在ghci 中加载它,没有任何问题。

【讨论】:

以上是关于为啥我们在haskell中编写函数时需要使用括号?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Haskell 函数参数必须是 Bool 类型?

为啥我们在给出模板类型时需要加上括号

为啥 Haskell 没有在函数签名中推断数据类型的类型类?

为啥我们需要将 e.target.name 放在方括号 [] 中? [复制]

为啥会出现这个错误?我们不能在函数括号内使用格式宏吗?

为啥slot函数调用成功也不能插入文本