Я читаю книгу «Учим тебя на хаскеле за великое благо!» Миран Липовака и изучение функций высшего порядка в главе 5.
Один из примеров включает следующую функцию:
applyTwice :: (a -> a) -> a -> a
applyTwice f x = f (f x)
Ниже приведены примеры вывода функции:
ghci> applyTwice (++ " HAHA") "HEY"
"HEY HAHA HAHA"
ghci> applyTwice ("HAHA " ++) "HEY"
"HAHA HAHA HEY"
Для первого примера я понимаю, что строка была получена с помощью оператора конкатенации следующим образом:
"HEY" ++ " HAHA"
"HEY HAHA" ++ " HAHA"
"HEY HAHA HAHA"
Однако я не понимаю, как работает оператор конкатенации во втором примере. Как получается выходная строка "HAHA HAHA HEY"? Любые идеи приветствуются.