考虑以下类:
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如何用于此目的?