1
のHListから型を構築しますか?私はそれが任意のHList
のCol[_]
を取ることができるようにマクロでなければならないと思う。は、このコードを考えると型クラス
のHListから型を構築しますか?私はそれが任意のHList
のCol[_]
を取ることができるようにマクロでなければならないと思う。は、このコードを考えると型クラス
あなたは、これが直接の外側型コンストラクタとしてCol
を有する素子の種類に依存していることに注意
、shapeless.ops.Comapped
であり
scala> import shapeless._, ops.hlist._
import shapeless._
import ops.hlist._
scala> Comapped[Col[String] :: Col[Int] :: HNil, Col]
res0: shapeless.ops.hlist.Comapped[shapeless.::[Col[String],shapeless.::[Col[Int],shapeless.HNil]],Col]{type Out = shapeless.::[String,shapeless.::[Int,shapeless.HNil]]} = [email protected]
scala> type TableDef = res0.Out
defined type alias TableDef
scala> val foo: TableDef = "foo" :: 23 :: HNil
foo: TableDef = foo :: 23 :: HNil
scala> val foo: TableDef = "foo" :: true :: HNil
<console>:18: error: type mismatch;
found : shapeless.::[String,shapeless.::[Boolean,shapeless.HNil]]
required: TableDef
(which expands to) shapeless.::[String,shapeless.::[Int,shapeless.HNil]]
val foo: TableDef = "foo" :: true :: HNil
^
の道のほとんどを得ることができます。
Name
と
Age
のようなタイプを収容したい場合は、サブタイプを介して
Col
を隠します。これはサブタイプを考慮に入れた
Comapped
のバリエーションを介して可能です。
「Comapped」へのポインタありがとう。 – serega
あなたは 'Col'の定義を自由にコントロールできますか? –
はい、私は 'Col'を完全に制御しています。 – serega