タイプの制限を強制するタイプ Union が必要だったので、hereの回答に従って、 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 ライブラリでそれを行うことは可能ですか??