モナド
逐次処理を便利に抽象化した概念。別に逐次処理じゃなくても表現できる人 → アプリカティブ
? 俺たちがやりたいプログラミングって実は計算じゃなくね?
数学的な意味での計算:
式が同じなら結果も同じになる
何度実行しても同じ
俺たちがプログラミングでやりたいこと:
式が同じだけど結果がなんか違う
e.g. process.env.USER => 人によって違う結果が出る
実行するとその都度なんかが起こってしまう
e.g. println("Yo") => 実行するたびに画面に出力が起こる
e.g. 外部APIを叩いてしまう
実行の順序で起こることが変わってしまう
エラーが起こって成功しないこともある
数学的な意味での計算じゃないと何が困るのか?
羃等ではない
「なんか変なことが起こる」
前後を気にしなくてはならない
合成しにくい
テストとかで困る
テストのたびに外部APIがどんどん呼ばれてほしくない
一方、数学的な意味での計算も当然やりたい
42 * 42みたいなやつ
本当の意味でただの計算
俺たちがプログラミングでやりたいこと = 数学的な意味での計算 + そうじゃないやつ
この付帯的な処理のことを仮に文脈と呼ぶとする
逐次処理しなければ文脈は発生しない
e.g. 画面に出力する、非同期になんかする、成功したり失敗したりする
こいつらを性質良くなんとかできる枠組みとして便利なのがモナド
なんでも逐次構造の枠組みに統一的に押し込めることができる