3

考虑以下类:

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")

然后我想构建一个严格类型的映射,类似于shapelessHList中的 s 。就像是:

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

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

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

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

最后,我们将获得一种构造复合“对象”的方法,它具有直接声明对象的所有优点,但可以存储在“其他地方”。像没有反射的反射。

问题是——如何完成目标?scalaz / shapeless如何用于此目的?

4

0 回答 0