2

私は、次のケースを処理する方法を見つけるために戦ってきました。ここでは、リンゴとリンゴを比較する型クラスにアクセスできるように、型パラメーターを統一する共通のビュー (またはスーパー クラス) を見つけたいと考えています。

case class Foo[A](i:A) {
  def cmp[B:Ordering, C <% B](b:B)(implicit ev: A => B) = implicitly[Ordering[B]].lt(i,b)
}
// Foo(1).cmp(2.0) works
// Foo(1.0).cmp(2) complains about evidence of Double => Int

さて、これは簡単な関数で簡単に行うことができます:

def cmp[A:Ordering](a1:A, a2:A) = implicitly[Ordering[A]].lt(a1,a2)
// cmp(Foo(1).a, 1.0)
// cmp(Foo(1.0).a, 1)

ただ、Fooのメソッドとしては生きて欲しい。ビューの境界を使用するように強制するために何ができるかについてのアイデアはありますか?

4

1 に答える 1