Function 了解Haskell中all函数中括号的用法?

Function 了解Haskell中all函数中括号的用法?,function,haskell,Function,Haskell,我正试图了解Haskell编程的惯例和规则。有一件事我感到困惑或难以理解,那就是括号()的用法。有人能给我解释一下它在all函数中的作用吗 all :: (a -> Bool) -> [a] -> Bool all p xs = and [ p x | x <- xs ] 够了吗?括号在这里起什么作用 Haskell中的括号的用途与大多数其他编程语言非常相似:更改操作和/或分组项的优先级 在您的例子中,(a->Bool)用括号括起来,这表明函数的第一个参数的类型是a->

我正试图了解Haskell编程的惯例和规则。有一件事我感到困惑或难以理解,那就是括号()的用法。有人能给我解释一下它在all函数中的作用吗

all :: (a -> Bool) -> [a] -> Bool
all p xs = and [ p x | x <- xs ]
够了吗?

括号在这里起什么作用 Haskell中的括号的用途与大多数其他编程语言非常相似:更改操作和/或分组项的优先级

在您的例子中,
(a->Bool)
用括号括起来,这表明函数的第一个参数的类型是
a->Bool
。如果没有括号(即,如果签名是
all::a->Bool->[a]->Bool
),则意味着函数的第一个参数的类型是
a
,函数的第二个参数的类型是
Bool

拥有
all::[a]->Bool
难道还不够吗? 如果这是签名,那么问题是:这样的功能意味着什么?当列表不为空时,是否返回
True
?还是当它是空的?或者当它正好包含42个元素时?函数的坏名称。应该将其命名为
has42个元素
,而不是
all

另一方面,如果函数采用类型为
a->Bool
的第一个参数(即,函数采用
a
并返回
Bool
),则
all
的含义将是“检查此列表中所有元素的此函数是否为
True
”。

括号在这里做什么 Haskell中的括号的用途与大多数其他编程语言非常相似:更改操作和/或分组项的优先级

在您的例子中,
(a->Bool)
用括号括起来,这表明函数的第一个参数的类型是
a->Bool
。如果没有括号(即,如果签名是
all::a->Bool->[a]->Bool
),则意味着函数的第一个参数的类型是
a
,函数的第二个参数的类型是
Bool

拥有
all::[a]->Bool
难道还不够吗? 如果这是签名,那么问题是:这样的功能意味着什么?当列表不为空时,是否返回
True
?还是当它是空的?或者当它正好包含42个元素时?函数的坏名称。应该将其命名为
has42个元素
,而不是
all


另一方面,如果函数采用类型为
a->Bool
的第一个参数(即,采用
a
并返回
Bool
),则
all
的含义将是“检查此列表中所有元素的此函数是否为
True
”.

all
接受两个参数:一个谓词函数(即元素的布尔测试)和一个列表。@duplode哦,我明白了!感谢you@Elmex80s
有签名
[Bool]->Bool
所有
都有两个参数:一个谓词函数(即元素的布尔测试)和一个列表。@duplode Ohh我明白了!感谢you@Elmex80s
具有签名
[Bool]->Bool
all :: [a] -> Bool