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"), "-") 
... 

결과 : 그것은cats typeclasses를 사용하는 방법? 에

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

작동하지 않는 방법과 그것을 해결하기 위해 왜?

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

편집 : 1 : 그것은 자신의 문서에서 불과 카피 인 것 같아

에도 여전히 작동하지 않는 제안 import cats.instances.all._을 제거한 후. 당신은 두 번 Foldable[List]의 인스턴스를 가져

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

사용중인 고양이 버전은 무엇입니까? –

+0

@YuvalItzchakov 0.7.2 – monnef

답변

2

:와 지금은 충돌 import cats.instances.all._을 통해 한 번을 통해 import cats.implicits._ 번을. 그들은 그렇게 모호해진다.

소스를 보면 cats.instances.allcats.implicits의 하위 집합임을 알 수 있습니다. 간체 :

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

    object implicits extends syntax.AllSyntax with instances.AllInstances 
} 

또한, it seemsFoldable.intercalate는 고양이 0.9.0까지 추가 할 수 없습니다.

+0

'import cats.instances.all._'을 제거한 후'value intercalate는 cats.Foldable [List]'의 멤버가 아닙니다. (나는 그것을 할 수있는 다양한 물건을 시도하고있었습니다. 예제에서와 같이 작동하므로 불필요한 가져 오기가있을 수 있습니다. 또한 그들은 모호한 경우 컴파일러가 그렇게하지 않았을까? typeclass 인스턴스가 누락 된 것 같습니다 ._. – monnef

+0

고양이 0.7.2는 아직'intercalate '하지 않았던 것 같습니다. –

+0

고마워, 그게 문제 였어. 나는 원래의 repo 대신에 쓸데없는 포크 (그러므로 구버전)로 가서 고양이를 봤다. - /. – monnef