Я прокладываю себе путь через Haskell book, и я немного озадачен складками. Одно упражнение просит читателя написать функцию elem
с помощью foldr
. Я не мог опустить голову и придумал пример, который я сейчас пытаюсь понять. Тип подпись для foldr
является:Что такое лямбда в этом складном деле?
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
пример функции я нашел:
myElem' :: Eq a => a -> [a] -> Bool
myElem' a = foldr (\x y -> a == x || y) False
Я понимаю, что (\x y -> a == x || y)
производящего (a -> b -> b)
части типа, False
производящий b
и t a
является подразумевается в стиле, свободном от точек.
Но сама лямбда сейчас кажется магией. Я читаю его как функцию x с одним параметром y, проверит, x(y) == a
, с элементом, поставленным в качестве аргумента myElem'
, и верните True или исходный аргумент в x
. Это явно чепуха. Где я иду не так?
Lambdas являются анонимными. 'x' - это не имя функции, а один из аргументов. – duplode