【Haskell】モノイドで畳み込む
import Data.Monoid import qualified Data.Foldable as F data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show) instance F.Foldable Tree where foldMap f EmptyTree = mempty foldMap f (Node x l r) = F.foldMap f l `mappend` f x `mappend` F.foldMap f r
fというのは、任意の型をモノイドに変換する関数です。Sum, Product, Any, Allなどがあります。Treeの中に10より大きい要素があるかを調べるには、以下のようにすればよいです。
F.foldMap (\x -> Any $ x > 10) tree