Сглаживание произвольно вложенных кортежей, содержащих элементы класса case, с использованием Shapeless - PullRequest
0 голосов
/ 16 октября 2018

Я использовал следующий пример:

https://github.com/milessabin/shapeless/blob/master/examples/src/main/scala/shapeless/examples/flatten.scala

, чтобы сгладить кортежи.Однако теперь я понял, что тематические классы также уплощены.Можно ли как-нибудь гарантировать, что только кортежи будут сплющены?

TIA

1 Ответ

0 голосов
/ 17 октября 2018

Вам может потребоваться неявное IsTuple:

object flatten extends LowPriorityFlatten {
  implicit def caseTuple[P <: Product : IsTuple]
      (implicit lfm: Lazy[FlatMapper[P, flatten.type]]) =
    at[P](lfm.value(_))
}

Тест:

val v4 = (Bar(Foo("a")), (true, 2.0, "foo"))
val f4 = flatten(v4)
typed[(Bar, Boolean, Double, String)](f4)
...