2016-03-11 8 views
2

Я рассматриваю возможность использования библиотеки 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.

+2

InteliJ решила, что правильный путь вперед должен был построить собственный интерпретатор Scala для вывода типа, что также дало им уверенность в том, что они могут запустить Kotlin. Иглы, чтобы сказать, что это случай обучения на своих ошибках (или полных неудач в этом случае). Если вы считаете, что это плохо, попробуйте использовать Shapeless или получить автоматическую поддержку на маршрутах Spray. – flavian

ответ

1

Видимо, проблема была решена с помощью JetBrains. Я проверил ночную сборку 2.2.40 из Scala плагин here, и теперь Intellij выводит один и тот же тип в вышеупомянутый случай, как РЕПЛ Большая работа JetBrains, и так быстро

PS если вы хотите, чтобы дать ему попробовать, добавить ночной репозиторий в список плагинов репозиториев и проверить наличие обновлений Это в Settings -.!.>Plugins ->Browse repositories... ->Manage repositories..., а затем добавить платный плагин Scala: https://plugins.jetbrains.com/plugins/nightly/1347.

Смежные вопросы