Я рассматриваю возможность использования библиотеки cats
в своем проекте, чтобы использовать ее функцию траверса/последовательности в списке Either
. Однако в Intellij IDEA, когда я делаю Show type
, я вижу совершенно странный предполагаемый тип. В то же время, если я скопирую и вставляю этот код в sbt console
, я получаю красивый и чистый тип. Вот пример:Вывод типа Scala Intellij отличается от REPL
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, а также со стабильными версиями этих программ, это все равно.
Я думаю, что в этот момент я ничего не могу сделать, но, может быть, просто, может быть, есть какое-то обходное решение для этого?
P.S. Такие вещи (например, поддержка инструментария) замедляют принятие FP, по крайней мере, не менее, чем внутренняя концептуальная сложность FP. :(
PPS Проблема в трекере IntelliJ является here.
InteliJ решила, что правильный путь вперед должен был построить собственный интерпретатор Scala для вывода типа, что также дало им уверенность в том, что они могут запустить Kotlin. Иглы, чтобы сказать, что это случай обучения на своих ошибках (или полных неудач в этом случае). Если вы считаете, что это плохо, попробуйте использовать Shapeless или получить автоматическую поддержку на маршрутах Spray. – flavian