> map (++ "!") ["a", "b", "c"]
["a!","b!","c!"]
> (++) "!" "a"
"!a"
Эти две линии для меня не имеют смысла. При использовании ++
в map
, кажется, что первый параметр добавляется ко второму, но во втором списке это наоборот. Как Хаскелл рассуждает о поведении в функции map
?Как работает частное приложение?
Стоит также отметить, что '("! "++)' тоже является законным, что совпадает с '\ x ->"! " ++ x'. –
@Antal: В Haskell 98, да. Но по соображениям производительности GHC делает вместо этого только '(++)"! "', Что может привести к некорректному кэшированию выражения. – fuz
True, что также позволяет использовать постфиксные операторы с этим синтаксисом (хотя я думаю, что для этого требуется опция GHC); однако, для объяснения концепции, определения одной запутанной вещи в терминах того, с чем она смущается, вероятно, не помогает :-) –