Я новичок в Haskell, и я читаю книгу "Real World Haskell". В главе 4 книги автор спрашивает как упражнение переписать функцию groupBy с помощью fold. Один из читателей книги (Октавиан Voicu) дал следующее решение:Сколько аргументов принимает функция foldr Haskell?
theCoolGroupBy :: (a -> a -> Bool) -> [a] -> [[a]]
theCoolGroupBy eq xs = tail $ foldr step (\_ -> [[]]) xs $ (\_ -> False)
where step x acc = \p -> if p x then rest p else []:rest (eq x)
where rest q = let y:ys = acc q in (x:y):ys
Мой вопрос прост: Я знаю, что foldr принимает 3 аргумента: функцию, начальное значение и список. Но во второй строке кода foldr принимает 4 аргумента. Почему это происходит? Спасибо.