Сегодня, когда я работал над одним маленьким script, я использовал foldl вместо foldl'. Я получил stack overflow, поэтому я импортировал Data.List (foldl') и был доволен этим. И это мой рабочий процесс по умолчанию с foldl. Просто используйте foldl', когда ленивая версия падает для оценки.
Real World Haskell говорит, что в большинстве случаев мы должны использовать foldl' вместо foldl. Foldr Foldl Foldl говорит, что
Обычно выбор между
foldrиfoldl'....
Однако, если функция объединения lazy в своем первом аргументе,
foldlможет с радостью вернуть результат, в которомfoldl'попадает в исключение.
И приведенный пример:
(?) :: Int -> Int -> Int
_ ? 0 = 0
x ? y = x*y
list :: [Int]
list = [2, 3, undefined, 5, 0]
okey = foldl (?) 1 list
boom = foldl' (?) 1 list
Ну, извините, но это скорее академический, интересный, но академический пример. Поэтому я спрашиваю, есть ли пример практического использования foldl? Я имею в виду, когда мы не можем заменить foldl на foldl'.
Р. S. Я знаю, трудно определить термин practical, но я надеюсь, вы поймете, что я имею в виду.
Р. P. S. Я понимаю, почему lazy foldl является дефолтом в haskell. Я не прошу никого переместить гору и сделать строгую версию по умолчанию. Меня просто интересуют примеры исключительного использования функции foldl:)
Р. P. P. S. Ну, любое интересное использование foldl приветствуется.