Haskell中的通用函数组合

时间:2010-12-29 04:14:00

标签: function haskell function-composition

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

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

以下表达式无效

(b . a) 2 3

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

这个限制是因为在Haskell中定义最通用的一个问题还是有其他原因?

我是Haskell的新手,所以我问的可能是无用的问题。

1 个答案:

答案 0 :(得分:7)

执行a 2 3时,您没有将a应用于2个参数。您实际上是将a应用于它的唯一参数,从而生成一个函数,然后将该函数应用于3.因此,您实际上会执行2个应用程序。所以从某种意义上说,你所拥有的并不等同于此:

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

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

(b . a 2) 3