Я новичок в Haskell и читаю книгу "Real World Haskell" . В главе 4 книги автор предлагает в качестве упражнения переписать функцию groupBy с помощью функции fold. Один из читателей книги (Октавиан Войку) дал следующее решение:
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 аргумента. Почему это происходит? Спасибо.