我正在考虑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问题在此处。
显然,该问题是由Jetbrains解决的。我检查斯卡拉的每日构建2.2.40插件这里,现在的IntelliJ推断在上述情况下,REPL同一类型。Jetbrains做得好,而且很快!
PS,如果您想尝试一下,请将每晚存储库添加到插件存储库列表中,并检查更新。在Settings
-> Plugins
-> Browse repositories...
->中Manage repositories...
,然后每晚添加Scala插件存储库:https : //plugins.jetbrains.com/plugins/nightly/1347。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句