Меня смущает один конкретный пример функции const
. Таким образом, объявление типа const :: a -> b->a
указывает, что функция принимает два параметра типа a
и b
и возвращает тип a
. Например:
const 5 3 => 5
const 1 2 => 1
Это имеет смысл на основе декларации. Однако я столкнулся с этим конкретным примером:
const (1+) 5 3 => 4
Это заставляет меня усомниться в моем понимании объявления функции. Я знаю, что эта функция принимает только два параметра, потому что я пытался:
const 1 5 3
Теперь это убеждает меня, что он принимает только 2 параметра. Так как же это работает? Разве (1+)
не является параметром? Если нет, то что это?
const (1+) 5 3 => 4
a
может быть любого типа, аb
игнорируется. Конкретным случаем может быть(a -> a -> a) -> b -> (a -> a -> a)
.b
игнорируется, и возвращается функцияa -> a -> a
, ожидающая двух новых входных данных. - person JohEker   schedule 05.03.2020(1+)
— это один параметр, но он также может принимать один параметр, что означает, что это функция.const
возвращает его, и он вполне естественно принимает параметр (третий,3
в вашем примере) - person Redu   schedule 05.03.2020