Рассмотрим следующий пример:
import shapeless._
case class Foo(bar: String, baz: Boolean)
val labl = LabelledGeneric[Foo]
Теперь тип labl
(prettified)
LabelledGeneric[Foo] {
type Repr =
FieldType[Symbol @@ String("bar"), String] ::
FieldType[Symbol @@ String("baz"), Boolean] ::
HNil
}
который уже передает необходимую мне информацию, то есть имена полей класса case.
То, что я ищу, - это способ перейти от labl
к чему-то по строкам
"bar" :: "baz" :: HNil
то есть. материализуя информацию, содержащуюся в одноэлементных типах, в значение.
Возможно ли это?
Я мог бы использовать макрос, но мне кажется, что в конечном итоге я переписал бы что-то очень похожее на объект GenericMacros
в бесформенном виде, поэтому мне интересно, могу ли я использовать его напрямую.