令人费解的功能构成

0 haskell function-composition

如何在下面的表达式中理解函数组合?

map . foldr (.) id :: [b -> b] -> [b] -> [b]
Run Code Online (Sandbox Code Playgroud)

Luk*_*hne 9

f :: [a->a] -> a -> a
f = foldr (.) id
Run Code Online (Sandbox Code Playgroud)

这将获取函数列表并将它们组合在一起

例如

foldr (.) id [(+1),(+2)] == ((+1) . ((+2) . id)) == (+3)
Run Code Online (Sandbox Code Playgroud)

功能应用程序具有最高的固定性,并且最后制作地图

map . foldr (.) id == \x -> map ( foldr (.) id x )
Run Code Online (Sandbox Code Playgroud)

foldr (.) id在应用第一个参数(函数列表)之后,它映射到列表(第二个参数)