Глядя на отличном блоге Трэвиса Брауна на Type classes and generic derivation, я вижу следующий метод:Значение `::` в параметре типа?
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
}
}
Что смысл H :: T
в Parser[H :: T]
?
Кроме того, как это case cell +: rest
обрабатывают случай, когда s
, то есть ввод apply
пуст?