部分申請 - 第 2 部分

作為另一個例子,我們有函式 map,它接受一個函式和一個值列表,並將函式應用於列表的每個值:

map :: (a -> b) -> [a] -> [b]

假設我們想要增加列表中的每個值。你可以決定定義自己的函式,它在其引數中新增一個函式,並在你的列表中新增函式 map

addOne x = plus 1 x
map addOne [1,2,3]

但如果你再看一下 addOne 的定義,加上括號來強調:

(addOne) x = ((plus) 1) x

當應用於任何值 x 時,函式 addOne 與應用於 x 的部分應用函式 plus 1 相同。這意味著函式 addOneplus 1 是相同的,我們可以通過用 plus 1 替換 addOne 來避免定義新函式,記住使用括號將 plus 1 作為子表示式隔離:

map (plus 1) [1,2,3]