型クラス
その型が持つべき性質を定義する
型のinterfaceになる
Scala, PureScriptにもある
Haskell固有の話
PureScript固有の話
似てる機能
interface
Java, TypeScript
C++
抽象クラス、Concept
Rust, Scala?
trait
D, Kotlin, Go2
contract
Swift, Elixir
protocol
指摘
テンプレート・ジェネリクスはパラメトリック多相で、型クラスはAd Hoc多相なので(そのはず)、そこの部分は違う気がします。ジェネリクス⇔型変数のある関数などと、オーバーロード⇔型クラスがそれぞれ対応しそうな気がします。ref 参考
型クラスのある言語を実装する
理論的な話
地味に関係ないかもだが、型クラスの嬉しさの説明に使える気がする
Foldable型クラスのinstanceになると、ここに列挙しているような関数全てが使えるようになる(20個ぐらいある)
普通ならこの20個に対して定義を明記しないといけないが、実際に必要なのは2つのみである
2つのみ定義を書いておけば、自動で他の18個が使えるようになる。うれしい
Implementing, and Understanding Type Classes