RWHの4章にfoldlをfoldrによって書く例が載っていたのだけど、ぱっと見ただけではわからなかったので良く考えてみた。 Real World Haskell―実戦で学ぶ関数型言語プログラミング Bryan O'Sullivan,John Goerzen,Don Stewart オライリージャパン / ¥ 3,990 () 在庫あり。 myFoldl :: (a -> b -> a) -> a -> [b] -> a myFoldl f z xs = foldr step id xs z where step x g a = g (f a x) これは結局 foldr step id xs によって出来た関数に本来の初期値であるzを与えていると。 例えば myFoldl (+) 0 [1..3] だと foldr (+) id [1..3] により \x -> (+3) $ (+2)
![Real World Haskell 4章 (foldrを使ってfoldlを定義する)](https://cdn-ak-scissors.b.st-hatena.com/image/square/e3356803e0ca2fbf81750674b5e9ef63e7a486bc/height=288;version=1;width=512/http%3A%2F%2Fwww.kzfmix.com%2Fimages%2Fogp%2Fogp_logo.jpg)