Немного неофитского вопроса haskell, но я столкнулся с этим примером в Haskell примерах обучения. Для "найти последний элемент списка" есть некоторые очевидные версии, например
last' [x] = x
last' (_:xs) = last' xs
Но я не могу понять альтернативную версию:
myLast' = foldr1 (const id)
Итак, пытаясь понять, что делает приложение id, я попытался в ghci:
const id 1 2 -> gives 2
Это связывается следующим образом:
(const id) 1 2 -> gives 2
И не так:
const (id 1) 2 -> gives 1
Но я не понимаю этого. (const id)
должен перевести на что-то вроде
`(\x y->x) (\x->x)`
Не следует ли возвращать функцию, которая просто возвращает идентификатор своего первого элемента? Или, как порядок выполнения функции (const id) ведет себя иначе, чем const?