解构单体类型与其成分的统一

时间:2014-07-02 14:42:00

标签: scala types shapeless type-level-computation

我正在使用单身人士类型,并且基于Miles Sabin的代码片段之一,我有这个:

scala> trait Param[K] { self =>
     |   type V
     | }
defined trait Param

scala> def param[V0](key: String): Param[key.type] { type V = V0 } = new    Param[key.type] { type V = V0 }
param: [V0](key: String)Param[key.type]{type V = V0}


scala>   val r = param[Int]("q")
r: Param[String("q")]{type V = Int} = $anon$1@770c789a

scala>   val s = param[String]("s")
s: Param[String("s")]{type V = String} = $anon$1@9e77ebd

到目前为止一直很好,但现在说我有一个表达方式:

scala>   val ff = if (true) {
    |     r
    |   } else {
    |     s
    |   }
ff: Param[_ >: String("q") with String("s") <: String]{type V >: Int with String} = $anon$1@770c789a

查看表达式的类型,看起来K和V分别用String(&#34; s&#34;)和Int with String统一到String(&#34; q&#34;)< / p>

这是有道理的,但现在我的问题是,是否可以“去除”#34;或强迫这种类型的成分,即上面的r和s的类型。

如下所示,转换为元组:

Param[K0 with K1] { type V: V0 with V1 } -> (Param[K0] { type V: V0}, Param[K1] { type V: V1})

我正在寻找纯粹属于类型的东西。有没有机会解构统一类型?

0 个答案:

没有答案