Parametricity

最近parametricityについてジャバを書きながらずっと考えていたのだけど、割と便利な結論が出てきたと思う。

継承を用いたデザインパターンはできないだろ、とか突っ込まれそうだけど実質同じ用途だったら同じとする。そこの差異に興味はない。
デザインパターンの定義はなんだよ、とかparametricityはなんだよとかも突っ込まれそうだけどまあそのうち。


論自体はまだまだ続くのだけど。例えば型クラス拡張版は簡単に導出できる。後はhigher-order-kindの型パラメータどうするかとか、Theorems for free!を基に考えてみるとか。あとプログラミングだけでなく一般の思考メソッドとしても用いることが出来る。


そのうちまとめてどこかで発表するかもしれない。


今まで設計に関する議論で気になってたことは、ドメインに踏み込めないことだ。そこをなんとかしたいとずっと考えていた。しかしparametricityならドメインの問題に踏み込みつつドメイン情報を排除し、問題の構造パターンを正しく構築し、間違えずに再利用することが出来る。パターンを組み合わせても問題なく動く。素晴らしいじゃないか。


幸い現在は関数プログラミング周辺が賑やかになっている。parametric polymorphismを活用するには静的型付き関数型言語はOOPLより良いものだ。その理由は関数がオブジェクトに比べて十分に小さいからだ。

最近関数型言語デザインパターンに関して本も出版されたし、これから設計手法、実装手法がもっと発達しそうだ。