平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

.NETに型クラスを……の話ふたたび

以前の記事でこんなことを書いてたのですが

もちろんCLRにもILにも型クラス的なものなんかないわけで、オダスキー教授が言うところの「貧者の型クラス(pdf)」を使う、つまり型に適合するメソッド群をインスタンスとして渡してやるしか方法はないわけですが(ちなみにScalaでは、そのインスタンスを暗黙的に生成したり渡したりできる仕掛けがある)。

2014-04-29 - 猫とC#について書くmatarilloの雑記

(追記)ん?型クラス(もどきインスタンス)、new()制約をつけられるんじゃないの?

2014-04-29 - 猫とC#について書くmatarilloの雑記

ちょっと違うアプローチを実験してる人がいる模様。

visualfsharp/concepts at master · crusso/visualfsharp · GitHub

長めのドキュメントを読むと……

static class Overloads {
  public static bool Equals<EqA, A>(A a, A b) where EqA : struct, Eq<A> => 
    default(EqA).Equals(a, b);
}

なるほど、型クラス(もどきインスタンス)を構造体で作れば、new T()とかしなくてもdefault(T)でいけるのか。