分散类型类的隐式扩展

时间:2015-11-18 18:45:35

标签: scala typeclass shapeless

我正在尝试从this blog post扩展Parser类型类以支持嵌套的案例类解析。由于我是新手,我决定从非一般情况开始,这只会支持一个包含2个字段的案例类,这些字段本身就是案例类。为了更好地说明这一点,首先是案例类定义:

case class Person(name: String, age: Int)
case class Family(husband: Person, wife: Person)

除了该博客文章的代码之外,我还创建了一个本应支持我的案例的隐式函数,通过将字符串划分为Family来解析"Hans,70|Emmy,60"类。 2 '|'部分,然后独立解析这2个独立的部分,最后组合结果。这是它的样子:

implicit def nestedCaseClassParser[A, B, C]
  (
    implicit pb: Parser[B],
    pc: Parser[C],
    gen: Generic.Aux[A, B :: C :: HNil]
  ): Parser[A] = new Parser[A] {
    override def apply(s: String): Option[A] = {
      val tmp = s.span(_ != '|') match {
        case (h, t) =>
          for {
            a <- pb(h)
            b <- pc(t.substring(1))
          } yield a :: b :: HNil
      }
      tmp.map(gen.from)
    }
  }

然后,当我试图像这样解析它时:

val p = Parser.apply[Family]("hello,1|hello,1")

我收到以下编译错误:

<console>:83: error: diverging implicit expansion for type Parser[Family]
starting with method nestedCaseClassParser in object Parser
       val p = Parser.apply[Family]("hello,1|hello,1")
                             ^

我不是要求完全解决完全通用嵌套案例类解析的问题,因为我很想自己找到它,但我真的很感谢这个代码出了什么问题的解释,以及我怎样才能在这个简单的层面上发挥作用。

编辑:由于我已经克服了最初的问题,因此我为下一步遇到的问题创建了separate questions

0 个答案:

没有答案