TypeScriptで関数型プログラミングっぽいことをする
モナドについての記事を読み直してみたが、数学的な部分は何を言っているのかさっぱりだった。
ただ、純粋関数を補完するようなイメージを持った。「モナド+純粋関数=>現実的な関数」という図式。
モナドのような抽象的な概念を学ぶには、抽象的なことだけを学習してはいけないと思う。たとえば、算数を学ぶには、お金が出てきたり、ケーキが出てきたり、B君がA君よりも30分家から出るのが遅くなければならない。1+1=2だけだったら、いつまで経っても理解が進まない。具体的で、かつ利益になることを学習しようとしなければ、身にしみて理解することは難しいように思う。
先に出てきた「モナド+純粋関数=>現実的な関数」は、かなり抽象的で、そのままの状態では役に立たないように思う。たとえば、以下のような感じで具体化してはどうだろう?
- モナド+エラーを考えていない関数=>エラーを考えている関数
というわけで、関数型プログラミングを使ったエラーハンドリングに関する記述をTypescriptで探すところから始めてみようと思う。なぜTypescriptなのかと言えば、よく使っている言語だから。
fp-tsを勉強するのが良さそう。
これはエラーとは関係ない。パターンマッチングが単純に欲しい
Taskを使うとエラーが起こらないことを型で明示できる。
TaskEitherを使うとエラーハンドリングが楽にできる。
ifがなくなるのはとても良さそう。コードが読みやすくなった。
Better PromiseとしてTaskEitherは良さそう。
バリデーションにはEitherを使うみたい。
ということは、バリデーション→エラーハンドリングのほうが話の流れとしてスムーズかもしれない。
Either→Task→TaskEitherという感じか。
Promiseって1976年に提唱されていた概念なのか。
Promises/A→Promises/A+となり、乱立するPromise群に終止符。