【问题标题】:False errors when using cats library in IntelliJ在 IntelliJ 中使用猫库时出现错误错误
【发布时间】:2016-04-14 05:34:09
【问题描述】:

我正在使用cats Scala 库,而IntelliJ IDE 似乎在努力使用隐式:

这是一个简单的例子:

import cats.std.all._
import cats.Traverse.ops._

def useSequence[A](ls : List[Option[A]]) : Option[List[A]] = {
  ls.sequence
}

在 IntelliJ 中,此代码以红色突出显示。但是我可以使用Make Project 或命令行来构建。

现在的错误是:

Nothing[List[Nothing]] 类型的表达式不符合预期的类型 Option[List[A]]

其他时候错误是这样的:

值序列不是List[Option[A]]的成员

这是 IntelliJ 中的错误还是我缺少某些配置?

我正在使用带有 Scala 插件版本 2.0.4 的 IntelliJ 15.0.2。

【问题讨论】:

  • 这基本上是一个 intellij 错误,它只能推断出这么多,而且这看起来它使用了一些宏,这使得 intellij 更难推断类型(猫使用宏而不是你)。如果你想让 intellij 开心,你需要给它更多类型ls.sequence[Option, A]

标签: scala intellij-idea implicits scala-cats


【解决方案1】:

这是 IntelliJ/Scala 插件 (SCL-10259 - False error (good code red): sequence from cats) 中的一个未解决问题,自 2016 年 5 月 13 日起开放。

正如上面的@Noah cmets,目前的解决方法是通过提供容器的类型和应用序列的包含类型来帮助 IntelliJ,即 (针对猫 1.0 更新)

import cats.instances.all._
import cats.Traverse.ops._

def useSequence[A](ls : List[Option[A]]) : Option[List[A]] = 
  ls.sequence[Option, A]

【讨论】:

    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2022-11-07
    相关资源
    最近更新 更多