持つ
class A
class B extends A
class C extends A
class Container[+L <: HList](l: L)
次のようにコーディングする形のない方法は何ですか?:
def foo[L <: HList](a: A): Container[L] = a match {
case (b: B) => new Container(1 :: "a" :: HNil)
case (c: C) => new Container(1.0 :: HNil)
case _ => new Container(HNil)
}
そして、それをある意味で使用するには:
val l1: Container[Int :: String :: HNil] = foo(new B)
val l2: Container[Double :: HNil] = foo(new C)
val l3: Container[String :: HNil] = foo(new C) // Compile-time error
「Why `List[B]` is not a subtype of `Seq[L]` when `class B extends A` and `L <: A`? "。