0
私は型パラメータを含むシングルトン型を試しています。私はそのシングルトン型のWitnessとそのネスト型の型クラスの両方を受け付ける関数を記述しようとしています。これは、(以下f1()
とf2()
を参照)それぞれを個別に取得するのは簡単ですが、私はそれが同時に動作するように取得することができませんでした:同時に証人と型クラスを取得する
inferred type arguments [Nothing,Test.v.type] do not conform to method f3's type parameter bounds [L,M <: Vector[L]]
[error] f3(v ->> "foo")
があり、私が取得しています
import shapeless._
import shapeless.labelled.FieldType
import shapeless.syntax.singleton._
sealed trait TC[L]
object TC {
implicit def intTC = new TC[Int] {}
}
object Test {
def f1[VI <: Vector[Int]](value: FieldType[VI, String])(
implicit wt: Witness.Aux[VI]) = {}
def f2[L](value: FieldType[_ <: Vector[L], String])(
implicit wt: TC[L]) = {}
def f3[L, M <: Vector[L]](value: FieldType[M, String])(
implicit wt: TC[L], witness: Witness.Aux[M]) = {}
val v = Vector(1,2,3)
f1(v ->> "foo") // works
f2(v ->> "foo") // works
f3(v ->> "foo") // does not work
}
コンパイラがインナー型とシングルトン型を同時に推論するのを助ける方法はありますか?
最初のパラメータリストに「L」への参照が含まれていないため、Nothingと推測されます。あなたは 'f3 [Int、v.type]'でそれを呼び出そうとしましたか? –
コンパイラが自動的に型を推論する方法を探しています – thesamet