объявление константной функции в haskell - PullRequest
3 голосов
/ 05 марта 2020

Я запутался в одном конкретном примере функции const. Таким образом, объявление типа const :: a -> b->a утверждает, что функция принимает два параметра типа a и b и возвращает тип a. Например:

const 5 3 => 5
const 1 2 => 1

Это имеет смысл, основываясь на объявлении. Однако я столкнулся с этим конкретным c примером:

const (1+) 5 3 => 4

Это заставляет меня усомниться в моем понимании объявления функции. Я знаю, что эта функция принимает только два параметра, потому что я пытался:

const 1 5 3 

Теперь это убеждает меня, что она принимает только 2 параметра. Так как это работает? Разве (1+) не является параметром? Если нет, то что это?

const (1+) 5 3 => 4

1 Ответ

9 голосов
/ 05 марта 2020

Я знаю, что эта функция принимает только два параметра (…)

Каждая функция в 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.

...