Я новичок в Haskell и смотрю на простой пример использования приложения-функции с $
.
Это кажется простым — он берет функцию и применяет ее к значению.
Так что это имеет смысл:
> (+3) $ 2
5
Это также имеет смысл:
> ($) (+3) 2
5
Это имеет смысл, потому что первый аргумент — это функция, а второй — значение.
Теперь рассмотрим возможность использования $
для создания частичной функции.
Глядя на типы, это имеет смысл - просто нужно значение типа Num
для b
:
> :t ($) (+3)
($) (+3) :: Num b => b -> b
Но вот где я теряюсь - что здесь происходит?:
> :t ($) (2)
($) (2) :: Num (a -> b) => a -> b
Я ожидал, что первым аргументом должна быть функция, а не просто числовое значение.
Итак, вот мои вопросы:
- Что тут происходит?
- Что означает синтаксис ограничения
Num (a -> b)
? - Какой пример использования
($)
таким образом, который начинается с чего-то вроде($) (2)
?
Спасибо!
:t 2
и посмотрите.2
может быть функцией, если очень постараться. - person n. 1.8e9-where's-my-share m.   schedule 02.02.2019