部分申请 - 第 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]