You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala 3.3.3导入cats.kernel.laws.IsEq报错:laws非cats.kernel成员

解决导入cats.kernel.laws.IsEq时的"laws is not a member of cats.kernel"错误

问题原因

  1. 依赖作用域限制:你在build.sbt中将cats-laws依赖标记为% Test,这意味着该依赖仅在测试代码目录(src/test/scala)下可见,而你的IsEq引用写在主代码(src/main/scala)中,编译时自然找不到该类。
  2. 包名冲突风险:代码使用package scala作为包名,会与Scala标准库的根包名冲突,可能引发隐藏问题。

解决方案

推荐方案(符合Cats设计意图)

Cats的laws组件专为测试场景设计,建议将用到IsEq的代码移到测试目录:

  • 将包含myIsEq的代码文件移动到项目的src/test/scala目录下。
  • 保持build.sbt中的cats-laws依赖配置不变(保留% Test)。
  • 修改包名为自定义名称(比如com.example.checkall),避免与标准库冲突。

备选方案(不推荐,仅用于特殊场景)

如果必须在主代码中使用IsEq,需调整cats-laws的依赖作用域:
修改build.sbt中的依赖配置,移除% Test:

"org.typelevel" %% "cats-laws" % "2.9.0"

同时记得修改冲突的包名。

修改后的测试代码示例

package com.example.checkall

import cats.*
import cats.kernel.laws.IsEq
import cats.kernel.instances.int.*

class EqualitySpec extends munit.FunSuite {
  test("test integer equality") {
    val a = 42
    val b = 42
    val isEqual: IsEq[Int] = IsEq(a, b)
    assert(isEqual.lhs == isEqual.rhs)
  }
}

内容的提问来源于stack exchange,提问作者Ali Tc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:02:22