Немного неофита в вопросе о 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?