В целом, foldl
исключается в пользу foldl'
или foldr
. Цитирование Real World Haskell:Почему некоторые функции Prelude определены в терминах foldl?
Из-за поведения thunking из foldl, разумно, чтобы избежать этой функции в реальных программах: даже если он не провалится сразу, он будет излишне неэффективно. Вместо этого импортируйте Data.List и используйте foldl '.
Тем не менее, некоторые функции Prelude определены в терминах его (например, (\\)
и unionBy
). Почему это? Не следует ли вводить слишком строгое отношение к этим функциям?
Примечание: анализ строгой шкалы в GHC означает, что 'foldl' работает лучше, чем вы могли бы подумать удивительно часто. – singpolyma
Строго говоря, '(\\)' и 'unionBy' не находятся в Prelude. – sdcvvc