Сегодня, когда я работал над одним маленьким 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
приветствуется.