次のクラスを検討してください。
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を目的に使用するにはどうすればよいですか?