3

http://web.archive.org/web/20080622204226/http://www.cs.vu.nl/boilerplate/中给出的示例中

-- Increase salary by percentage
increase :: Float -> Company -> Company
increase k = everywhere (mkT (incS k))

-- "interesting" code for increase
incS :: Float -> Salary -> Salary
incS k (S s) = S (s * (1+k))

对于类型签名中提到的第一家公司,增加函数如何编译而不绑定任何内容。

是否类似于分配给部分函数?为什么会这样?

4

1 回答 1

3

是的,它与部分应用的概念相同。这条线更短(但可以说不太清楚)相当于

increase k c = everywhere (mkT (incS k)) c

Aseverywhere接受两个参数但只给出一个参数,其类型everywhere (mkT (incS k))Company -> Company。因为这正是increase k每个 Float k 返回的内容,所以结果类型increaseFloat -> Company -> Company

于 2010-04-07T20:32:08.420 回答