Нет, здесь функция map :: (a -> b) -> [a] -> [b]
принимает значение (flip subtract 20)
, это параметр, который вы передаете map
.Это означает, что:
map (flip subtract 20) [1,2,3,4]
эквивалентно:
[flip subtract 20 1, flip subtract 20 2, flip subtract 20 3, flip subtract 20 4]
flip :: (a -> b -> c) -> b -> a -> c
- это функция, которая принимает функцию ипереворачивает параметры.Таким образом, flip subtract 20
семантически эквивалентен \x -> subtract x 20
.Таким образом, наш список эквивалентен:
[subtract 1 20, subtract 2 20, subtract 3 20, subtract 4 20]
subtract :: Num a => a -> a -> a
- это «перевернутая» версия (-)
, поэтому она эквивалентна:
[20 - 1, 20 - 2, 20 - 3, 20 - 4]
и, следовательно, эквивалентно:
Prelude> map (flip subtract 20) [1,2,3,4]
[19,18,17,16]
Более короткая версия приведенного выше выражения выглядит так:
map (20 -) [1,2,3,4]