IOモナドの例が出ていた。Maybeモナド、Eitherモナドなど、ラッピングにより、Nullや例外の扱いがスッキリする状況がわかりやすく書かれています。その流れで、IOモナドの説明になりますが、細かいところでよく確認しないと少し難しいところもでてきます。
const changeToStartCase =
IO.from(readDom('#student-name'))
.map(_.startCase)
.map(writeDom('#student-name'));
fromは
static from(fn){
return new IO(fn);
}
となり、fnそのものをIOにラッピングしている。
fnは ()=>document.querySlector('#student-name').innerHTML
ということか
mapは
map(fn){
const self=this;
return new IO( ()=> fn(self.effect()));
}
ここでは、fnは1文字目を大文字にしたり、domへの書き込みということのようだ。
いずれもIOでラッピングされた中で変換されていくということか
ただ、changeToStartCaseだけでは、IO処理の宣言的な記述のみ
IOのインスタンス(関数をラッピングしただけのもの?)なので、何も実行されていないということらしい。
changeToStartCase.run();
でコードが処理される。
ちなみに
run(){
return this.effect();
}
となっている。
要するに、fromで、IOでラッピングした関数(ラッピングされる関数を効果関数と呼んでいるようだ)を用意して、ラッピングされたままの関数をmapで変換していき、できたものを、最後に実行させるということだろうか。
0 件のコメント:
コメントを投稿