Scala with Cats示例报错:无法找到cats.Functor[Some]的隐式值
解决
mapN找不到Functor[Some]的问题 嘿,我来帮你搞定这个报错!你遇到的问题根源很简单:你用的是Some类型,而Cats为mapN提供的隐式实例是针对Option父类型的,不是Some这个具体子类。
当你写Some("foo")时,Scala编译器会默认推断它的类型是Some[String],而不是Option[String]。但Cats的Functor、Semigroupal这些类型类的实例都是定义在Option上的,所以编译器找不到Functor[Some]的隐式值,就抛出了你看到的错误。
修正方案
你只需要把类型统一为Option就行,有两种简单的写法:
方式1:直接使用Option.apply
import cats.implicits._ // 这个导入已经包含了所有需要的实例和语法扩展 case class Name(fName: String, lName: String) // 用Option代替Some,让编译器自动推断出Option[String]类型 (Option("foo"), Option("bar")).mapN(Name.apply)
方式2:显式指定类型为Option[String]
如果你坚持想用Some,可以给每个值显式标注父类型:
import cats.implicits._ case class Name(fName: String, lName: String) // 给Some显式指定Option[String]类型,让编译器识别到父类型的隐式实例 (Some("foo"): Option[String], Some("bar"): Option[String]).mapN(Name.apply)
补充说明
你之前导入的cats.instances.option._、cats.syntax.apply._其实已经被cats.implicits._完全包含了,所以可以只保留这一行导入来简化代码,功能完全一致。
内容的提问来源于stack exchange,提问作者Knows Not Much
相关产品推荐
相关产品推荐

