2012年8月2日木曜日

クラウド温泉3.0 (12) / Monoid

クラウド温泉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について様々な観点から取り上げてきたので、この中から情報をピックアップしてスライドに集約する形になります。どれを持ってくるか悩みどころですね。

fold

Monoidの重要なユースケースであるfoldについて。foldとMonoidの組み合わせは関数型プログラミングのハイライトの一つかもしれません。Monadicプログラミングという観点からも、一つスライドを割り当てて取り上げることになると思います。

Reducer/Generator

Monoidの応用であるReducer, Generatorについて。Reducer自身は利用するシーンはあまり多くはないかもしれませんが、Monoidをどのような形で伸ばしていくのかというアプローチは参考になります。

0 件のコメント:

コメントを投稿