2012年8月23日木曜日

Scala Tips / Monoid Index

そろそろScala 2.10.0がリリースされそうなので、調査の対象をScala 2.10.0 & Scalaz 7に移行しようと思います。そこでMonoidも一旦〆ることにしました。

Monoidは、他の項目でいろいろな形で説明してきているので、Monoidの項目で直接取り上げるのは2つのみになっています。

項目内容
Monoid - 新規作成Scalaz型クラスMonoidの型クラスインスタンスを実装する方法
Monoid (2) - 中央値中央値をMonoid化する

他の項目のところでは以下のとおり再三Monoidが登場しています。

Monoidは関数型プログラミングでの重要構成要素の一つだと思うので、どこかの時点でMonoid中心の視点でまとめ直してみたいと思います。

既存Index

以下は既存のIndexです。

Validation

項目内容
Validation (1) - 値の取り出し正常値またはデフォルト値を取得
Validation (2) - 関数で値の取り出しfoldを使って値を取り出す
Validation (3) - NonEmptyListFailure側をNonEmptyListにする
Validation (4) - mapFunctorとして使う
Validation (5) - flatMapMonadとして使う
Validation (6) - ExceptionExceptionをValidation化する
Validation (7) - forfor式で使う
Validation (8) - forで演算の連結for式でValidation結果を連結する
Validation (9) - forで演算を連結2for式で連結。前段を参照する場合。
Validation (10) - applicativeApplicative Functorとして使う
Validation (11) - モナドScalaモナドとScalazモナド
Validation (12) - parseparseIntなどでValidationを取得
Validation (13) - toValidatationFunction1のtoValidation
Validation (14) - オブジェクトの生成Validationしてオブジェクトを作る
Validation (15) - 多重度1の部品多重度1の部品の捌き方
Validation (16) - 多重度1の実装多重度1の部品の実装
Validation (17) - 多重度0または1の部品多重度0または1の部品の実装
Validation (18) - 多重度0以上の部品多重度0以上の部品の実装
Validation (19) - 多重度1以上の部品多重度1以上の部品の実装
Validation (20) - Personの実装色々な多重度のプロパティを持つPersonクラスを実装
Validation (21) - traversetraverseでValidationを扱う
Validation (22) - sequencesequenceでValidationを扱う
Validation (23) - foldfoldでValidationを扱う
Validation (24) - fold scalazscalazのfoldでValidationを扱う
Validation (25) - fold monoidMonoidを正常値とするValidationとfold
Validation (26) - fold monoid or↑でコンテナをor演算
Validation (27) - fold or↑で正常値がMonoidでない場合
Validation (28) - fold ListListに対する畳込み
Validation (29) - FoldableFoldable上でValidationを使う
Validation (30) - foldまとめValidationの畳込み処理のまとめ
Validation (31) - Function1Function1にあるValidation系メソッド
Validation (32) - Function0Function0にあるValidation系メソッド
Validation (33) - reduce
Validation (34) - SemigroupValidationをSemigroup化する
Validation (35) - MonoidValidationをMonoid化する
Validation (36) - ReducerValidationのReducerを作る

Validationの一連の記事では、Validationを素材にScalaやScalazの基本機能の使い方を調べるという意味合いも強くなっています。

以下はこの流れからスピンアウトして単独の記事にしたものです。

またValidation記事の中にも、基本機能の説明が主になっているものもあります。

Reducer

項目内容
ReducerIntProductReducerを素材にReducerの基本的な使い方
Reducer (2) - ListListReducerを素材に非可換MonoidでのReducerの振舞い
Reducer (3) - モノイド化非Monoidに対してReducerでモノイド演算を行う
Reducer (4) - 自前Reducer自前でReducerを用意する
Reducer (5) - 演算Monoid汎用MonoidをReducerでドメインオブジェクトに結びつける
GeneratorGeneratorで畳込み戦略、汎用Monoid、ドメインオブジェクトを結びつける

Reducerの操作対象であるMonoidについて以下の記事が前提となります。

IntProductReducerで使っているMonoidであるIntMultiplicationは以下の記事で説明しています。

Either

項目内容
Either値の取得
Either (2) - flatMapflatMapで文脈の切替
Either (3) - getOrElsegetOrElseでデフォルト値を指定
Either (4) - getOrElse, FlatMapflatMapで変換後にgetOrElse
Either (5) - Exceptionscala.util.control.Exceptionで例外ハンドリング
Either (6) - Left, RightLeftとRightの生成
Either (7) - forfor式で変換
Either (8) - for, getOrElsefor式で変換後にgetOrElse
Either (9) - 二項演算二項演算の説明
Either (10) - 二項演算,AND「Either:AND」×「値:任意の関数で計算」
Either (11) - ApplicativeEitherに対するApplicative
Either (12) - Applicativeの記述方法Eitherに対するApplicative(続き)
Either (13) - 二項演算,AND,Monoid「Either:AND」×「値:Monoid」
Either (14) - 二項演算,AND,PlusEither:AND」×「値:Plus」
Either (15) - 二項演算,OR「Either:OR」×「値:任意の関数で計算」
Either (16) - 二項演算,OR,Monoid「Either:OR」×「値:Monoid」
Either (17) - 二項演算,OR,Plus「Either:OR」×「値:Plus」
Either (18) - Booleanと相互変換EitherとBooleanの相互変換
Either (19) - Optionと相互変換EitherとOptionの相互変換
Either (20) - Validationと相互変換EitherとValidationの相互変換
Either (21) - BifunctorEitherにBifunctorを適用

Option

項目内容
Option値の取得
Option (2)nullをOptionに持ち上げる方法
Option (3)map
Option (4)withFilter
Option (5)collect
Option (6)flatMap
Option (7)for式
Option (8)getOrElse
Option (9)withFilter, map, getOrElse
Option (10) - ExceptionflatMap, Exceptionハンドリング
Option (11) - Some/NoneSomeとNoneの記述方法
Option (12) - MonoidOptionをMonoidとして使う
Option (13) - Monoid 短絡ORFirstOption/LastOptionで短絡OR |
nullnullを値に持ち上げる方法

Optionについては以下の記事も参考になると思います。

追記(2012-08-27)

Option(5)〜Option(11)までリンク切れしていたので修正しました。

0 件のコメント:

コメントを投稿