型クラス
その型が持つべき性質を定義する
型のinterfaceになる
Ad Hoc多相
Scala, PureScriptにもある
MultiParamTypeClassesというGHC拡張がある
multi-parameter type class
Haskellの型クラス
Haskell固有の話
PureScriptの型クラス
PureScript固有の話
型クラスは、型(集合)に構造を入れるもの
似てる機能
NimのConcept?
interface
Java, TypeScript
C++
抽象クラス、Concept
Rust, Scala?
trait
D, Kotlin, Go2
contract
Swift, Elixir
protocol
指摘
テンプレート・ジェネリクスはパラメトリック多相で、型クラスはAd Hoc多相なので(そのはず)、そこの部分は違う気がします。ジェネリクス⇔型変数のある関数などと、オーバーロード⇔型クラスがそれぞれ対応しそうな気がします。ref
参考
『How to make ad-hoc polymorphism less ad hoc』
https://qiita.com/mod_poppo/items/b168b208ea3776676b1f
https://mizunashi-mana.github.io/blog/posts/2020/03/coherent-typeclass-and-orphan-instance/
https://mizunashi-mana.github.io/blog/posts/2020/03/coherent-implicit-parameter/
http://eed3si9n.com/ja/scala-implicits-type-classes
http://guppy.eng.kagawa-u.ac.jp/~kagawa/2012/AdvProg/Text/TypeClass.pdf
http://m-hiyama.hatenablog.com/entry/20160928/1475022255
型クラスのある言語を実装する
http://zehnpaard.hatenablog.com/entry/2019/08/14/091146
https://coordination.hatenablog.com/entry/2019/12/24/012049
理論的な話
https://qiita.com/Biacco/items/9b7ec9c1050b851617a5
https://m-hiyama.hatenablog.com/entry/20160928/1475022255
http://lampwww.epfl.ch/~odersky/talks/wg2.8-boston06.pdf
http://maoe.hatenadiary.jp/entry/20091021/1256101883
https://qiita.com/Izawa_/items/1a5d2fd99aa49524db03#foldableクラス
地味に関係ないかもだが、型クラスの嬉しさの説明に使える気がする
Foldable型クラスのinstanceになると、ここに列挙しているような関数全てが使えるようになる(20個ぐらいある)
普通ならこの20個に対して定義を明記しないといけないが、実際に必要なのは2つのみである
2つのみ定義を書いておけば、自動で他の18個が使えるようになる。うれしい
https://kmizu.hatenablog.com/entry/2017/05/23/160923
https://okmij.org/ftp/Computation/typeclass.html
Implementing, and Understanding Type Classes