15

I am using the cats Scala library and the IntelliJ IDE seems to be struggling with the use of implicits:

Here is a simple example:

import cats.std.all._
import cats.Traverse.ops._

def useSequence[A](ls : List[Option[A]]) : Option[List[A]] = {
  ls.sequence
}

In IntelliJ, this code is highlighted red. But I can build just fine using Make Project or the command line.

Right now the error is:

Expression of type Nothing[List[Nothing]] doesn't conform to expected type Option[List[A]]

Other times the error is something like:

value sequence is not a member of List[Option[A]]

Is this a bug in IntelliJ or am I missing some configuration?

I am using IntelliJ 15.0.2 with version 2.0.4 of the Scala plugin.

mushroom
  • 6,201
  • 5
  • 36
  • 63
  • 6
    It's basically an intellij bug, it can only infer so much, and this looks like it uses some macros which makes it even harder for intellij to to infer types (cats is using macros not you). If you want intellij to be happy you need to give it some more types `ls.sequence[Option, A]`. – Noah Jan 10 '16 at 06:28

1 Answers1

5

This is an open issue in IntelliJ/Scala Plugin (SCL-10259 - False error (good code red): sequence from cats) open since May 13, 2016.

As @Noah comments above, the workaround for now is to help IntelliJ out by providing the types of the container and contained types that sequence is applied to, i.e. (updated for cats 1.0):

import cats.instances.all._
import cats.Traverse.ops._

def useSequence[A](ls : List[Option[A]]) : Option[List[A]] = 
  ls.sequence[Option, A]
Arne Claassen
  • 14,088
  • 5
  • 67
  • 106