嵌入式函数调用中的括号

在前面的示例中,我们最终不需要括号,因为它们不会影响语句的含义。但是,它们通常需要更复杂的表达,如下所示。
在 C:

plus(a, take(b, c));

在 Haskell 中,这变为:

(plus a (take b c))
-- or equivalently, omitting the outermost parentheses
plus a (take b c)

请注意,这不等于:

plus a take b c -- Not what we want!

有人可能认为,因为编译器知道 take 是一个函数,它将能够知道你想将它应用于参数 bc,并将其结果传递给 plus
但是,在 Haskell 中,函数通常将其他函数作为参数,并且函数和其他值之间几乎没有实际的区别; 所以编译器不能仅仅因为 take 是一个函数而假设你的意图。

因此,最后一个示例类似于以下 C 函数调用:

plus(a, take, b, c); // Not what we want!