モナドを理解してみる
Haskellなど関数型言語でよく出てきますが、ちゃんと概念的な部分を理解してみる試み。
モナドとは
自己関手の圏における、モノイド対象です。いやわからん。
モノイド、単位元など、似たようにワードをまず調べてみると
還元主義というか、多は異なりというか、群論というか、
ようは物事を構成する最小単位、的なものたちが存在し
現実でいえば原子。数学で言えば単位元とかがあり
プログラミング、というか関数でのそういうののうちの一つにモナドがある、くらいの、ふんわり理解をしておく
flatMap
とりあえずJSでいうflatMap
がモナドのうちの一つ。
mapは、配列の一つ一つの要素に対して処理し、配列を返すが
処理がT=>T出ないといけない。T=>T[]と、次元が上がるときにflatMapが必要
めちゃくちゃわかりやすい記事があったので、これを参考に。
つまり?
これを定義することで何が嬉しいか、モナドを使いこなせて何が嬉しいのかを考えてみる。
以下の記事ではモナドという設計思想(?)を用いて、実際にものを作ってみた例があります。
これらを読んでみると
- モナドという抽象概念に基づいた設計で、お得な共通チェーン処理が作れる
- Optinalなど、ラムダ系が絡む既存ライブラリ等の理解が深まる
などがわかりますが、結局はモナドは考え方であり
カリー化であったり、ファンクタによるmapなどのチェーンをリフトさせるflatMapなどが、実は背景にモナドという考え方が取り入れられている
というより、こういう書き方ができるようには、T=>T[]のような関数を取れるものがあればいい、と条件
があるように見え、それを抽象化した結果をモナドと名づけているだけに見える
すなわち、モナドは理解するものというより、モナドという概念のもとに成り立っている便利な仕組みを、いかにして使いこなせるようになるかが重要だと私は結論づけました