我正在阅读here,我注意到,例如,如果我有以下函数定义:
a :: Integer->Integer->Integer
b :: Integer->Bool
以下表达式无效:
(b . a) 2 3
组合的功能必须只有一个参数,这很奇怪。
这个限制是因为在Haskell中定义最通用的一个问题还是有其他原因?
我是Haskell的新手,所以我问的可能是无用的问题。
答案 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