涉及 NonEmptyList 的显示自动推导不正确

问题描述 投票:0回答:1

这个节目:

package domain

import cats.{Show, derived}
import cats.data.NonEmptyList
import cats.implicits._

case class Error(code: String, message: String)

case class Errors(errors: NonEmptyList[Error])

object ShowStuffApp {

//  import NonEmptyList.catsDataShowForNonEmptyList
  
  implicit val show: Show[Errors] = derived.semiauto.show

  def main(args: Array[String]): Unit = {

    val errors = Errors(NonEmptyList.one(Error("1234", "Could not process")))

    val res = errors.show

    println(res)
  }

}

打印出:

Errors(errors = NonEmptyList(head = Error(code = 1234, message = Could not process), tail = Nil$()))

因此它自动派生了 NEL 的

Show
实例,而不是使用带注释的隐式实例(在给定顶级导入的范围内); https://github.com/typelevel/kittens?tab=readme-ov-file#user-content-derive-show 的文档指出现有的隐含内容受到尊重,但这里的情况似乎并非如此。取消注释内部导入没有任何效果。有想法吗?

scala scala-cats
1个回答
0
投票

也许缺少

Show
类的
Error
实例,并且
NonEmptyList.catsDataShowForNonEmptyList
没有它就没用。如果你添加

implicit val showErrow: Show[Error] = derived.semiauto.show 

在您的代码中,

println
打印以下值:

Errors(errors = NonEmptyList(Error(code = 1234, message = Could not process)))
© www.soinside.com 2019 - 2024. All rights reserved.