「関数型ドメインモデリング ドメイン駆動設計とF#でソフトウェアの複雑さに立ち向かおう」を最近読んで、やっぱり型だけで処理の流れを記述できるのは強力だなと感じた。F# のコードを読んだのはこの本で初めてだが、関数型言語の強力な機能を持ちつつ、オブジェクト指向言語を書く人にも理解しやすい文法で良さそうだった。
僕は主に TypeScript でプログラミングをしているが、TypeScript はまだ関数型プログラミングするには言語機能が足りなくてきついと感じる。型システムは JavaScript の何でもありな値に対応するために、とても強力になっているが、それ以外の部分(TypeScript が拡張できない ECMAScript の領域)が未だに貧弱に思う。
ECMAScript でも提案されている機能だが、パイプライン演算子は関数中心でコードを書いていると欲しくなってくるし、Option 型や Result 型を使うようになってくると、コンピュテーション式のようにモナドを簡単に扱える構文も欲しくなってくる。
こういった言語機能なしに頑張って書こうとすると、map や bind などの関数を型の方に生やして(つまり class にする)、メソッドチェーンで書いてごまかす感じになってしまう。
JavaScript(TypeScript)を書いている人はどちらかと言えばオブジェクト指向よりは関数型を好んでいる人が多い印象があるが、普段どのようにコードを書いているのか気になる。