4

形状のない 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)

t1t2を のサブタイプとして定義するにはどうすればよいSTですか?

アップデート

Coproducts が解決策になると思います

type ST = t1 :+: t2 :+: CNil

fun(Coproduct[ST](5 :: "foo" :: 3 :: HNil)) // compiles
fun(Coproduct[ST](5 :: 3 :: HNil))          // does not compile
4

1 に答える 1