构造存储在别处的新对象类型和实例(不在val中)

时间:2013-08-24 17:07:10

标签: scala types scalaz shapeless

考虑以下课程:

case class Address(town:String, street:String, building:Int)
case class Person(name:String, address:Address)

数据直接存储在实例中。 我想将数据存储在“其他地方”的严格类型的地图中。类似的东西:

val townSlot = Slot[String]("townSlot")
val streetSlot = Slot[String]("streetSlot")
val buildingSlot = Slot[Int]("buildingSlot")

val nameSlot = Slot[String]("nameSlot")
val addressSlot = Slot[Address]("addressSlot")

然后我想在无形中构建一个类似于HList的严格类型的地图。类似的东西:

val mapAddress = townSlot :: streetSlot :: buildingSlot :: EmptyMap
val mapPerson = nameSlot :: addressSlot :: EmptyMap

mapAddress应具有完全描述插槽集的类型:

mapAddress.type =:= Map[townSlot.type :: streetSlot.type :: streetSlot.type]

mapAddress实例应该包含插槽列表(这很容易)。

最后,我们将得到一种构造复合“对象”的方法,这些对象具有直接声明对象的所有好处,但可以“存储在其他地方”。像反射没有反射的东西。

问题是 - 如何完成目标? scalaz / 无形如何用于此目的?

0 个答案:

没有答案