6

我在这里阅读,我注意到,例如,如果我有以下函数定义:

a :: Integer->Integer->Integer
b :: Integer->Bool

以下表达式无效

(b . a) 2 3

很奇怪,组合的函数必须只有一个参数。

这种限制是因为在 Haskell 中定义最通用的方法时出现问题还是有其他原因?

我是 Haskell 的新手,所以我问了一些可能没用的问题。

4

1 回答 1

7

当你这样做时a 2 3,你没有申请a2 个论点。您实际上是在应用a它的唯一参数,产生一个函数,然后将该函数应用于 3。所以您实际上做了 2 个应用程序。所以从某种意义上说,你所拥有的并不等同于:

a :: (Integer, Integer) -> Integer
b :: Integer -> Integer
(b . a) (2, 3)

你可以做到这一点,顺便说一句

(b . a 2) 3
于 2010-12-29T04:20:04.253 回答