形状のない HList に基づく型がいくつかあります。
type t1 = Int :: String :: Int :: HNil
type t2 = String :: String :: Int :: HNil
ST
次の機能がある場合、それらすべてのスーパータイプである封印された特性を定義したいと思います。
def fun(x:ST) = …
以下が有効です。
fun(5 :: "foo" :: 3 :: HNil) // It is a t1
fun("foo" :: "bar" :: 42 :: HNil) // It is a t2
しかし、以下はコンパイルされません:
fun(5 :: 3 :: HNil)
t1
とt2
を のサブタイプとして定義するにはどうすればよいST
ですか?
アップデート
Coproducts が解決策になると思います
type ST = t1 :+: t2 :+: CNil
fun(Coproduct[ST](5 :: "foo" :: 3 :: HNil)) // compiles
fun(Coproduct[ST](5 :: 3 :: HNil)) // does not compile