冬休み入ったのでのびのびひきこもりたいとおもいます。
Foldable
畳み込み関数を持ちます。
最低限実装しなければならないものはfoldRightかfoldMapです。
MA#foldMap
foldMapは要素をMonoidへ変換し、結合します。
MA#foldr, MA#foldl
右畳み込みと左畳み込み。
MA#foldl1, MA#foldr1
foldの初期値をなくしたもの。
失敗した場合はNoneが返る。
MA#foldLeftM, MA#foldRightM
モナドに包み、合成します。
MA#all, MA#∀, MA#any, MA#∃, MA#element, MA#∋, MA#∈:
allとanyは述語を、elementは要素を渡します。
∀, ∃, ∋, ∈:はエイリアスです。
MA#empty, MA#count, MA#foldIndex
emptyは空かどうか、countは要素の数、foldIndexはインデックスの値を取得します。
foldIndexは失敗した場合例外を投げます。
MA#listl, MA#listr, MA#stream
listl, listrはListに、streamはStreamにまとめます。
listlはfoldlで、listrはfoldrで実装されています。
MA#maximum, MA#minimum
要素の中から最大値、最小値を取得します。
要素が存在しない場合、Noneが返ります。
MA#selectSplit, MA#splitWith
selectSplitは述語が真の連続する要素を集めます。
偽の要素は捨てられます。
splitWithは述語が真か偽に変わるまで要素を集めます。
畳み込み関数は汎用性が高いのでFoldableが定義されるだけでこれだけの関数が使えるようになります。
前に紹介したTraverseは畳み込み関数が定義されていると定義がしやすかったのですが、Foldableは継承されていません。
しかし、Scalaz7ではTraverseがFoldableを継承するように変更されています。
0 件のコメント:
コメントを投稿