2010-04-07 27 views
2

在這個例子中http://web.archive.org/web/20080622204226/http://www.cs.vu.nl/boilerplate/瞭解SYB樣板消除

-- 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)) 

給出如何來增加功能,編譯沒有結合在它的類型簽名提到的第一個公司什麼。

是否像分配給部分函數?爲什麼這樣做?

回答

3

是的,它與部分應用程序的概念相同。該線是

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

作爲everywhere採用兩個參數,而僅給定的一個,的everywhere (mkT (incS k))類型是Company -> Company較短(但可以說不太清楚)等效。因爲這正是increase k爲每個浮點數k返回的結果,所以increase的結果類型爲Float -> Company -> Company

+4

起初可能不太清楚,但它是咖喱功能程序的基本屬性之一,並被每位經驗豐富的功能程序員視爲良好實踐。 – Martijn 2010-04-08 11:51:12