foldって難しい、というか書きづらくて読みづらくないですか、と思った話を書きます(そういう感じの話題でTLが盛り上がってたので) 以下、foldをrecursion schemeの観点から理解していることは前提とします foldをかく foldを書きたい foldを書こうと思う場合は自分の場合は明白で、可換monoid積で畳むときは必ずfoldで書きます sum = foldl (+) 0 これは入力と出力の型が一致していて細かいことを考えなくて良いし、何しているのか見れば分かるし、畳み込み感があっていい感じだし文句はない ただこういうのは得てしてすでに欲しい関数が定義されてたりする foldを書きたい?? これがアキュムレータ付き再帰をしたい場合になると若干微妙で、 f xs = go xs 0 where go [] acc = acc go (x:xs) acc = go xs (