我正在考虑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 问题在这里。