クラウド温泉3.0@小樽のセッション「Monadicプログラミング・マニアックス」で使用するスライドのネタ検討その12です。
関数型プログラミングで最重要な構成要素としてまずあげられるのがFunctorです。具体的にはmapメソッドを提供しているコンテナが相当します。これは空気のようなものですね。
そして、言うまでもなく最近の話題の中心はMonad。Scalaも言語仕様に取り入れています。セッションのテーマであるMonadicプログラミングも、このMonadをいかに活用するのかというのがひとつの軸になります。
この2つに加えて、個人的にこれも最重要構成要素に入れてよいのではと考えているがMonoidです。
Monoidは関数型プログラミングに頻出する抽象です。閉じた2項演算(つまりA☆A→A)でMonoidの規則を満たすものがあれば、Monoidとして定義しておくことでMonoid向けのさまざまなロジックをそのまま適用することができます。その代表的なものの一つがfoldによる畳込みです。
Monoidは残念ながらScalaの基本ライブラリでは提供されていないので、ScalazのMonoidを使うことになります。Scalazでは型クラスMonoidを提供しており、任意の型をMonoidとして定義することができます。
今まで記事でMonoidについて様々な観点から取り上げてきたので、この中から情報をピックアップしてスライドに集約する形になります。どれを持ってくるか悩みどころですね。
Monoid
Monoidを直接取り上げた記事です。
fold
Monoidの重要なユースケースであるfoldについて。foldとMonoidの組み合わせは関数型プログラミングのハイライトの一つかもしれません。Monadicプログラミングという観点からも、一つスライドを割り当てて取り上げることになると思います。
Reducer/Generator
Monoidの応用であるReducer, Generatorについて。Reducer自身は利用するシーンはあまり多くはないかもしれませんが、Monoidをどのような形で伸ばしていくのかというアプローチは参考になります。
Option, Either, Validation
Scala Tipsで取り上げてきた代表的なMonadであるOption, Either, ValidationにおけるMonoidです。foldやReducerとの組み合わせも出てきます。
- Scala Tips / Option (8)
- Scala Tips / Option (12) - Monoid
- Scala Tips / Either (13) - 二項演算, AND, Monoid
- Scala Tips / Either (14) - 二項演算, AND, Plus
- Scala Tips / Either (16) - 二項演算, OR, Monoid
- Scala Tips / Validation (5) - flatMap
- Scala Tips / Validation (25) - fold monoid
- Scala Tips / Validation (26) - fold monoid or
- Scala Tips / Validation (29) - Foldable
- Scala Tips / Validation (30) - foldまとめ
- Scala Tips / Validation (34) - Semigroup
- Scala Tips / Validation (35) - Monoid
- Scala Tips / Validation (36) - Reducer
0 件のコメント:
コメントを投稿