具有无形的解析器的通用推导

时间:2016-05-31 15:31:03

标签: scala shapeless

我正在阅读关于解析器的泛型推导的blog post。该帖子显示了如何定义Parser[H :: T]给定Parser[H]Parser[T],其中THList的子类型:

implicit def hconsParser[H: Parser, T <: HList: Parser]: Parser[H :: T] = 
  new Parser[H :: T] {
    def apply(s: String): Option[H :: T] = s.split(",").toList match {
      case cell +: rest => for {
        head <- implicitly[Parser[H]].apply(cell)
        tail <- implicitly[Parser[T]].apply(rest.mkString(","))
      } yield head :: tail
    }
  }

该帖子还定义了Parser[HNil]作为基本案例。

不幸的是我不明白编译器如何找到Parser[T]。我们没有为Parser[T]定义解析器T <: HList。我们只定义了Parser[H :: T]。编译器是否知道Parser[T]实际上是Parser[H1 :: T1]?它是如何知道的?

0 个答案:

没有答案