メソッドが同種で、同じ型の値を返すことができる型を書きたいと思いました。
object SimpleTest {
trait Foo extends Product with Serializable {
type Self <: Foo
def bar: Self
}
case class X() extends Foo {
type Self = X
def bar = this
}
case class Y() extends Foo {
type Self = Y
def bar = this
}
trait TC[A]
implicit val tc: TC[Foo] = new TC[Foo] { }
def tester[A: TC](x: Seq[A]) = "foo"
// tester(Seq(X(), Y()))
}
残念ながら、コメントアウトされた行の呼び出しtester
は次のエラーで失敗します (Scala 2.10):
Error: could not find implicit value for evidence parameter of type
SimpleTest.TC[SimpleTest.Foo{type Self >: SimpleTest.Y with SimpleTest.X <: SimpleTest.Foo}]
tester(Seq(X(), Y()))
^
基本的に、私はその理由について混乱しており、 にX
統一Y
していませんFoo
。明らかに型メンバーが問題を複雑にしていますが、その境界は尊重されているようです。
より高いレベルでは、普及型パラメーターのオーバーヘッドなしで、F-bounded ポリモーフィズムと同等のものを取得する軽量な方法を探しています。これはほとんど機能しているように見えますが、強制X
およびY
統合する注釈を追加する必要がありFoo
ます。