Maybeを使ったfoldr
普通のfoldrの第1,2引数を、1つの引数で表現している
unfoldrの双対であることがわかりやすい
ref foldrとunfoldrは双対
定義
code:hs
foldr :: (Maybe (a, b) -> b) -> a -> b
foldr f [] = f Nothing
foldr f (x:xs) = f (Just (x, foldr f xs))
使用例
sum関数を定義する
code:hs
{-# LANGUAGE LambdaCase #-}
sum :: Int -> Int
sum = foldr $ \case
Just (cur, acc) -> cur + acc
Nothing -> 0
/mrsekut-book-4274068056/064