2

我正在考虑cats在我的项目中使用库以在Either. 然而,在 Intellij IDEA 中,当我这样做时Show type,我看到了一个完全奇怪的推断类型。同时,如果我将此代码复制并粘贴到sbt console中,我会得到漂亮而干净的类型。这是示例:

scala> :paste
// Entering paste mode (ctrl-D to finish)

import cats._, cats.syntax.traverse._, cats.std.all._

    val xs: List[Either[String, Int]] = List(Right(1), Right(2))
    val r = xs.sequenceU

// Exiting paste mode, now interpreting.

import cats._
import cats.syntax.traverse._
import cats.std.all._
xs: List[Either[String,Int]] = List(Right(1), Right(2))
r: scala.util.Either[String,List[Int]] = Right(List(1, 2))

如您所见,该变量r有一个很好的类型:Either[String, List[Int]].

但是,Intellij 推断出以下怪物:

Unapply.Aux2Right[Applicative, Either[String, Int], Either, String, Int]#M[List[Unapply.Aux2Right[Applicative, Either[String, Int], Either, String, Int]#A]]

我不想让我的同事看到这种类型的痛苦,让我独自理解它,因为它会显着降低我的carma。我已经尝试过使用最新的 Intellij 16.1 EAP 和 EAP 构建的 Scala 插件,以及它们的稳定版本,都是一样的。

我想,此时我无能为力,但也许,只是也许,有一些解决方法?

PS 像这样的事情(即工具支持)减缓了 FP 的采用,至少不低于 FP 固有的概念复杂性。:(

Intellij 跟踪器中的 PPS 问题在这里

4

1 回答 1

1

显然,Jetbrains 解决了这个问题。我在这里检查了 Scala 插件的 nightly build 2.2.40 ,现在 Intellij 在上述情况下推断出与 REPL 相同的类型。Jetbrains 干得好,而且速度如此之快!

PS 如果您想尝试一下,请将 nightly 存储库添加到您的插件存储库列表并检查更新。它在Settings-> Plugins-> Browse repositories...->Manage repositories...中,然后添加 Scala 插件 nightly 存储库:https ://plugins.jetbrains.com/plugins/nightly/1347 。

于 2016-03-15T09:25:54.887 回答