2017-03-14 3 views
1
import cats._ 
import cats.data._ 
import cats.implicits._ 
import cats.instances.all._ 

... 
    def test = Foldable[List].intercalate(List("a", "b", "c"), "-") 
... 

Ergebnisse in:Wie verwende ich Katzen Typklassen?

could not find implicit value for parameter instance: cats.Foldable[List] 

Warum ist es nicht funktioniert und wie man es beheben? Es scheint, als ob es nur eine Kopie von ihrem docs ist:

scala> import cats.implicits._ 
scala> Foldable[List].intercalate(List("a","b","c"), "-") 
res0: String = a-b-c 

Edit 1:

Auch nach import cats.instances.all._ entfernen, wie es vorgeschlagen immer noch nicht funktioniert. Jetzt stürzt es mit:

value intercalate is not a member of cats.Foldable[List] 
+0

Welche Version von Katzen verwenden Sie? –

+0

@YuvalItzchakov 0.7.2 – monnef

Antwort

2

Sie die Instanz für Foldable[List] zweimal importieren: einmal durch import cats.implicits._ und einmal durch import cats.instances.all._. Sie werden auf diese Weise mehrdeutig.

Mit Blick auf die Quelle können Sie sehen, dass cats.instances.all eine Teilmenge von cats.implicits ist. Vereinfacht:

package cats { 
    package object instances { 
    object all extends AllInstances 
    } 

    object implicits extends syntax.AllSyntax with instances.AllInstances 
} 

Auch it seemsFoldable.intercalate wurde bis Katzen 0.9.0 hinzugefügt.

+0

Nach dem Entfernen von 'import cats.instances.all._' stürzt es mit' value ab intercalate ist kein Mitglied von Katzen.Faltbare [Liste] '(Ich habe verschiedene Sachen ausprobiert, die ich googlen konnte, nachdem sie nicht ' t funktioniert wie im Beispiel gezeigt, deshalb gibt es wahrscheinlich unnötige Importe). Auch wenn sie mehrdeutig wären, hätte Compiler das nicht gesagt? Es scheint, dass typeclass-Instanzen fehlen ._. – monnef

+0

Es scheint, dass Katzen 0.7.2 noch nicht interkalieren. –

+0

Danke, das war das Problem. Ich googelte Katzen und ging zu einer veralteten Gabel (daher die alte Version) anstelle des ursprünglichen Repos: - /. – monnef