Intellij的Scala类型推断与REPL不同

Haspemulator

我正在考虑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]]

我不想让我的同事遭受这种痛苦,甚至不去看这种类型的痛苦,因为它会严重降低我的病情。我已经使用最新的Intellij 16.1 EAP和scala插件的EAP版本以及稳定版本进行了尝试,它们都是一样的。

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

PS这样的事情(即工具支持)使FP的采用速度至少降低了FP固有的概念复杂性。:(

Intellij跟踪器中的PPS问题在此处

Haspemulator

显然,该问题是由Jetbrains解决的。我检查斯卡拉的每日构建2.2.40插件这里,现在的IntelliJ推断在上述情况下,REPL同一类型。Jetbrains做得好,而且很快!

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章