2016-01-09 12 views
7

Sto usando il gatti libreria Scala e l'IntelliJ IDE sembra essere alle prese con l'uso di impliciti:falsi errori quando si utilizza libreria di gatti in IntelliJ

Ecco un semplice esempio:

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

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

In IntelliJ, questo codice è evidenziato in rosso. Ma posso costruire bene usando Make Project o la riga di comando.

In questo momento l'errore è:

Espressione di tipo Nulla [Lista [Niente]] non risponde ai Tipo di opzione previsto [Lista [A]]

Altre volte l'errore è qualcosa di simile:

sequenza di valore non è un membro di List [Opzione [a]]

Si tratta di un bug in IntelliJ o mi manca qualche configurazione?

Sto usando IntelliJ 15.0.2 con la versione 2.0.4 del plugin Scala.

+5

si tratta fondamentalmente di un bug di IntelliJ, si può dedurre solo così tanto, e questo sembra che utilizza alcune macro che lo rende ancora più difficile per intellij inferire i tipi (i gatti usano le macro non tu). Se vuoi che intellij sia felice, devi dargli qualche altro tipo 'ls.sequence [Option, A]'. – Noah

risposta

0

Questa è una questione aperta in IntelliJ/Scala Plugin (SCL-10259 - False error (good code red): sequence from cats) aperta dal 13 maggio, 2016.

Come @Noah osservazioni di cui sopra, la soluzione per ora è quello di aiutare IntelliJ fuori fornendo i tipi di contenitore e conteneva i tipi che la sequenza viene applicato, ossia (aggiornato per i gatti 1.0):

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

def useSequence[A](ls : List[Option[A]]) : Option[List[A]] = 
    ls.sequence[Option, A] 
Problemi correlati