Я знаю, что эта функция принимает только два параметра (…)
Каждая функция в Haskell принимает один параметр. В самом деле, если вы напишите:
const 5 1
, тогда это сокращенно для:
(const 5) 1
Подпись типа const :: a -> b -> a
- это более компактная форма const :: a -> (b -> a)
.
Итак, const 5
создаст функцию, которая игнорирует параметр (здесь 1
) и возвращает значение, которое ему было дано 5
.
Теперь для const (1+) 5 3
, таким образом, это означает, что мы написали:
((const (1+)) 5) 3
const (1+)
, таким образом, создаст функцию, которая игнорирует параметр и возвращает (1+)
, следовательно, const (1+) 5
равно (1+)
. Затем мы вычисляем:
(1+) 3
, что составляет 4
.