考虑以下各种尝试last
:
Prelude> import Data.Foldable
Prelude Data.Foldable> foldr const undefined (reverse [1,2,3])
3
Prelude Data.Foldable> foldr' const undefined (reverse [1,2,3])
3
Prelude Data.Foldable> foldl (flip const) undefined [1,2,3]
3
Prelude Data.Foldable> foldl' (flip const) undefined [1,2,3]
*** Exception: Prelude.undefined
CallStack (from HasCallStack):
error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
undefined, called at <interactive>:5:21 in interactive:Ghci4
这对我来说是有道理的,foldl
而且foldr
两者都有效,因为它们的累加器并不严格,而对我来说,这并不严格foldl'
,因为它是有道理的。但为什么foldr'
有效?它的累加器不应该也很严格吗?