型クラスの比較
Standard MLが圧倒的に良くできているな。オーバーロードを意図してない、型システムじゃない、という問題点はあるが、許せる、許せる。
Haskellは「悪いお薬」をキメている。当座はとても元気が出るが、いずれは心身を蝕むアレ。型名に対するコアージョンを組み込みで入れている。組み込み、骨絡みだらか外せない。僕は、短絡的な発想による設計ミスだと思うが、今更どうにもならないだろう。
Scalaは、パラメータを取るという点でHaskellを踏襲してしまったので、やっぱり「悪いお薬」の影響がそのうち出るだろう。
Coqの型クラスは概念的には良く出来ているんだが、半世紀前の名前空間のせいで台無し。まったくクソになってしまっている。ほんとに残念。
メジャー言語は、型クラスを最初から入れてるわけじゃなくて後付けだから、なんか歪んでいる。利便性優先でオーガニックな構造を歪めてるか壊しているかしているので、禍根を残す、つうか禍根を“残されて”いる。
感想としては、Standard ML設計者のスマートさが際立つな。しかしながら、禁欲的でもあるから世間にはウケないかもしれない。
[追記]SML/NJでは、higher-order functorという割とエグい拡張をしている。
Moscow MLでは、higher-orderで過去にしくっていた。
IsabelleエンジンであるPoly/MLは、こういう方向への拡張はしないんだよなー。
[/追記]