我需要一个类型 Union 来强制限制类型,所以按照这里的答案,我将我的 Union 定义为:
sealed trait Value[T]
object Value{
implicit object NumberWitness extends Value[Int]
implicit object StringWitness extends Value[String]
}
现在,我如何创建由这种类型联合参数化的列表或类?有可能这样做吗?我在 repl 中尝试了以下语法,但没有任何运气:
scala> import Value._
import Value._
scala> def list[V: Value] = List("hello", 1)
list: [V](implicit evidence$1: Value[V])List[Any]
scala> list
<console>:18: error: ambiguous implicit values:
both object NumberWitness in object Value of type Value.NumberWitness.type
and object StringWitness in object Value of type Value.StringWitness.type
match expected type Value[V]
list
^
或者是否可以使用scalaz或cats等高级FP库来做到这一点?