Scala 发散隐式展开

Scala 发散隐式展开,scala,implicit,scalacheck,Scala,Implicit,Scalacheck,有人能给我解释一下为什么这里会出现“发散隐式扩展错误”吗?我认为这与类型同义词typemyidtype=String有关,但我不确定原因 import org.scalacheck.Arbitrary import org.scalacheck.Arbitrary._ import org.scalacheck.Gen def arbitraryCaseClass[A,C](f: A => C)(implicit t: Arbitrary[A]): Arbitrary[C] = Arbi

有人能给我解释一下为什么这里会出现“发散隐式扩展错误”吗?我认为这与类型同义词
typemyidtype=String
有关,但我不确定原因

import org.scalacheck.Arbitrary
import org.scalacheck.Arbitrary._
import org.scalacheck.Gen

def arbitraryCaseClass[A,C](f: A => C)(implicit t: Arbitrary[A]): Arbitrary[C] = Arbitrary(for(v <- arbitrary[A]) yield f(v))

type MyIdType = String

implicit val arbMyIdType: Arbitrary[MyIdType] = Arbitrary(Gen.identifier)

case class Foo(s: MyIdType, t: Int)

implicit def arbA = arbitraryCaseClass((Foo.apply _).tupled)

val foo = arbitrary[Foo].sample

可能您应该显示确切的错误以及导致错误的行。如果任意的伴生对象定义了
隐式对象
s,而不是显式返回类型的隐式val/defs,您可能会遇到这种情况。
Error:(13, 40) diverging implicit expansion for type org.scalacheck.Arbitrary[(A$A6.this.MyIdType, Int)]
starting with method arbTuple2 in trait ArbitraryArities
implicit def arbA = arbitraryCaseClass((Foo.apply _).tupled)