Scala 如何使用您的Boileplate combinator“遍历序列”;“一切”;不成形?

Scala 如何使用您的Boileplate combinator“遍历序列”;“一切”;不成形?,scala,shapeless,scrap-your-boilerplate,Scala,Shapeless,Scrap Your Boilerplate,我想在Shapeless中使用Scrap-Your-Boilerplate实现来操作一些case类,但我一直在试图弄清楚如何使SYB combinatoreverything遍历类型为Seq[…]的字段 例如,定义树,如: abstract sealed class Tree[+A] extends Product with Serializable case class Leaf[+A](value : A) extends Tree[A] cas

我想在Shapeless中使用Scrap-Your-Boilerplate实现来操作一些case类,但我一直在试图弄清楚如何使SYB combinator
everything
遍历类型为
Seq[…]
的字段

例如,定义树,如:

abstract sealed class Tree[+A] extends Product with Serializable
case class  Leaf[+A](value : A)                       extends Tree[A]
case class  Node[+A](left : Tree[A], right : Tree[A]) extends Tree[A]
要计算树叶的数量,以下方法非常有效

object countLeaves extends Poly1 {
  implicit def count[A]    = at((a : Leaf[A]) => 1)
  implicit def default[X] = at((x : X)       => 0)
}

object sum extends Poly2 {
  implicit final val add = at((i : Int, j : Int) => i + j)
}

scala> everything(countLeaves)(sum)(Node(Leaf(1), Leaf(2)))
res14: Int = 2
但是当使用
Seq
节点中存储子字段时

case class  Node[+A](children : Seq[Tree[A]])         extends Tree[A]
然后,
一切
都无法遍历字段子项:

scala> everything(countLeaves)(sum)(Node(Seq(Leaf(1), Leaf(2))))
res1: Int = 0
我尝试了各种各样的方法,但都不管用。我也不知道如何为
Seq[…]
编写正确的
数据实例

更新:
列表
调整
数据
实例
未成形。数据
似乎可行

implicit def seqData[P, T, R](implicit qt: Lazy[shapeless.poly.Case1.Aux[P, T, R]]): Data[P, Seq[T], R] =
  new Data[P, Seq[T], R] {
    def gmapQ(t: Seq[T]) = t.map(qt.value(_)).toList
  }