如何使用 Poly 函数修复此编译错误
How to fix this compilation error with a Poly function
我正在尝试将 Xor
的 HList
映射到 ValidatedNel
的 HList
,但出现错误:
scala> type Result[A] = Xor[String, A]
defined type alias Result
scala> type Validation[A] = ValidatedNel[String, A]
defined type alias Validation
scala> val r0 = Xor.right(0)
r0: cats.data.Xor[Nothing,Int] = Right(0)
scala> val r1 = Xor.left("xxx")
r1: cats.data.Xor[String,Nothing] = Left(xxx)
scala> import shapeless._
import shapeless._
scala> val rs = r0 :: r1 :: HNil
rs: shapeless.::[cats.data.Xor[Nothing,Int],shapeless.::[cats.data.Xor[String,Nothing],shapeless.HNil]] = Right(0) :: Left(xxx) :: HNil
scala> object toValidation extends (Result ~> Validation) { def apply[T](r: Result[T]): Validation[T] = r.toValidatedNel }
defined object toValidation
scala> rs map toValidation
<console>:41: error: type mismatch;
found : toValidation.type
required: shapeless.Poly
rs map toValidation
上面的代码有什么问题以及如何修复它?
你能仔细检查你的导入吗?
我怀疑 ~>
引用了 cats
的自然变换,而不是 shapeless
的 Poly。
在定义 toValidation
对象之前导入 shapeless.poly._
应该可以消除该错误。
我正在尝试将 Xor
的 HList
映射到 ValidatedNel
的 HList
,但出现错误:
scala> type Result[A] = Xor[String, A]
defined type alias Result
scala> type Validation[A] = ValidatedNel[String, A]
defined type alias Validation
scala> val r0 = Xor.right(0)
r0: cats.data.Xor[Nothing,Int] = Right(0)
scala> val r1 = Xor.left("xxx")
r1: cats.data.Xor[String,Nothing] = Left(xxx)
scala> import shapeless._
import shapeless._
scala> val rs = r0 :: r1 :: HNil
rs: shapeless.::[cats.data.Xor[Nothing,Int],shapeless.::[cats.data.Xor[String,Nothing],shapeless.HNil]] = Right(0) :: Left(xxx) :: HNil
scala> object toValidation extends (Result ~> Validation) { def apply[T](r: Result[T]): Validation[T] = r.toValidatedNel }
defined object toValidation
scala> rs map toValidation
<console>:41: error: type mismatch;
found : toValidation.type
required: shapeless.Poly
rs map toValidation
上面的代码有什么问题以及如何修复它?
你能仔细检查你的导入吗?
我怀疑 ~>
引用了 cats
的自然变换,而不是 shapeless
的 Poly。
在定义 toValidation
对象之前导入 shapeless.poly._
应该可以消除该错误。