'Identifiable'のサブタイプであるいくつかのタイプに対して、汎用の特性 'Repo'を作成しようとしています。私の計画は、 'Identifiable'サブタイプを記述するジェネリックTypeTag [HList]を渡すことによって、 'Repo'の実装者をインスタンス化することです。コンパイル時にHListタイプの上限を適用する
HListで渡される型が 'Identifiable'のサブタイプであることをコンパイラに保証させるにはどうすればよいですか?ここで
は、私がこれまで持っているものです: Type inference on contents of shapeless HList 違いは、私が仕事にHListの実装を持っていないです。
//All types in HList must extend Identifiable, how to enforce that at compile time?
trait Repo {
implicit val ltag: TypeTag[L] forSome {type L <: HList}
..
}
trait Identifiable {
..
}
case class Person(..) extends Identifiable
case class Address(..)
//This should compile
class MyRepo
(implicit val ltag: TypeTag[Person :: HNil])
extends Repo {
..
}
//This should not
class MyRepo
(implicit val ltag: TypeTag[Address :: HNil])
extends Repo {
..
}
//HList can contain an unknown number of types
私が関係しているように見えるこの質問を見てきましたどのようにして上限の計算をどのように行うことができるのかは分かりません。
この証拠を実装者からの形質に渡すための構文は何でしょうか?型パラメータを型に渡すことができないので、私の頭を包むのが難しいです。 – eirirlar
@eirirlar上の例を参照 –
大変ありがとう – eirirlar