Хорошо, это был долгий день, и мой мозг не может функционировать на уровне Haskell, но я просто не могу понять один пример из «Learn You a Haskell».Назначение функции в Haskell
Раздел называется функции приложения с $, и есть пример того, как $
может быть определена:
($) :: (a -> b) -> a -> b
f $ x = f x
До сих пор все ясно. Я понимаю, все примеры в разделе, за исключением последнего:
ghci> map ($ 3) [(4+), (10*), (^2), sqrt]
[7.0,30.0,9.0,1.7320508075688772]
Здесь мы отображаем ($ 3)
по списку функций и получить результат применения этих функций 3
. Но как это возможно?
С первого фрагменте кода становится ясно, что первый аргумент функции, мы можем даже написать:
*Main> ($) sqrt 4
2.0
Теперь ($ 3)
частичное применение функции $
, но 3
идет на позиции функция в! Итак, 3
должен быть функцией или что?
Есть еще одна тайна: что это такое: (4+)
? Я знаю, что (+4)
является частичным применением функции +
, поэтому (4+)
должно быть частичным применением функции 4
? Бред какой то. Какой трюк работает здесь?
Возможный дубликат [Частичное приложение с функциями Infix] (http://stackoverflow.com/questions/10131300/partial-application-with-infix-functions) – Lambdageek