Расхождение в неявном расширении для бесформенного LeftFolder

Я пытаюсь решить эту проблему и хочу сложить HList используя Poly2 функция.

Вот автономный MWE (вы можете скопировать и вставить его в REPL с бесформенным 2.0, чтобы воспроизвести проблему)

import shapeless._; import shapeless.record._

case class RowParser[T](value: T)

sealed trait ColParser[T, K <: Symbol] { val column: Witness.Aux[K] }
case class Nullable[T, K <: Symbol](column: Witness.Aux[K], parserF: String => RowParser[T]) extends ColParser[T, K]
case class NonNullable[T, K <: Symbol](column: Witness.Aux[K], parserF: String => RowParser[T]) extends ColParser[T, K]

val cols = NonNullable('col1, (_ => RowParser(42))) :: Nullable('col2, (_ => RowParser("foo"))) :: HNil

object toRecord extends Poly2 {
  implicit def colParser[C, T, K <: Symbol, LL <: HList](
    implicit ev: C <:< ColParser[T,K]
  ) = at[Tuple2[List[Int], LL], C] {
    case ((vals, rec), x) => (vals, field[K](vals.headOption) :: rec)
  }
}

cols.foldLeft((List(1,2), HNil))(toRecord)
// expected: Some(1) :: Some(1) :: HNil

Я получаю эту ошибку:

ошибка: расходящееся неявное расширение для типа shapeless.ops.hlist.LeftFolder[shapeless.::[NonNullable[Int,this.T],shapeless.::[Nullable[String,this.T],shapeless.HNil]],(List[Int], shapeless.HNil.type),toRecord.type]

начиная с метода hnilLeftFolder в объекте LeftFolder cols.foldLeft((List(1,2), HNil))(toRecord)

Таким образом, по-видимому, компилятор может найти несколько последствий для создания LeftFolderfoldLeft необходимо.

Я не могу понять, как устранить неоднозначность и явно сказать компилятору, что я на самом деле хочу получить LeftFolder который использует toRecord,

0 ответов

Другие вопросы по тегам