考虑以下课程:
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 / 无形如何用于此目的?