Сколько аргументов принимает функция foldr в Haskell?

Я новичок в 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 аргумента. Почему это происходит? Спасибо.

6
задан Will Ness 24 February 2019 в 20:15
поделиться