データ構造に対する処理を抽象化するための型クラスとして,第3回ではFunctorクラス,第34回ではFoldableクラスを説明しました。FunctorクラスやFoldableクラスでは,「データ構造の走査(traverse)」と「データ構造を走査した際に行う処理」をセットにしたfmapやfold*という処理が直接提供されています。 Haskell以外の言語が持つイテレータなどの機能では「データ構造の走査」と「データ構造を走査した際に行う処理」を切り離すことで,より一般的な処理を行えます。Haskellではそのような枠組みとして,Data.TraversableモジュールでTraversableクラスが提供されています。 mapM関数やsequence関数を一般化 まず,Traversableクラスがどのようなものかを簡単に見てみましょう。 Prelude Data.Traversable