I am using scala 2.10.0-snapshot dated (20120522) and have the following Scala files:
this one defines the typeclass and a basic typeclass instance:
package com.netgents.typeclass.hole
case class Rabbit
trait Hole[A] {
  def findHole(x: A): String
}
object Hole {
  def apply[A: Hole] = implicitly[Hole[A]]
  implicit val rabbitHoleInHole = new Hole[Rabbit] {
    def findHole(x: Rabbit) = "Rabbit found the hole in Hole companion object"
  }
}
this is the package object:
package com.netgents.typeclass
package object hole {
  def findHole[A: Hole](x: A) = Hole[A].findHole(x)
  implicit val rabbitHoleInHolePackage = new Hole[Rabbit] {
    def findHole(x: Rabbit) = "Rabbit found the hole in Hole package object"
  }
}
and here is the test:
package com.netgents.typeclass.hole
object Test extends App {
  implicit val rabbitHoleInOuterTest = new Hole[Rabbit] {
    def findHole(x: Rabbit) = "Rabbit found the hole in outer Test object"
  }
  {
    implicit val rabbitHoleInInnerTest = new Hole[Rabbit] {
      def findHole(x: Rabbit) = "Rabbit found the hole in inner Test object"
    }
    println(findHole(Rabbit()))
  }
}
As you can see, Hole is a simple typeclass that defines a method which a Rabbit is trying to find.  I am trying to figure out the implicit resolution rules on it.
- with all four typeclass instances uncommented, scalac complains about ambiguities on - rabbitHoleInHolePackageand- rabbitHoleInHole. (Why?)
- if I comment out - rabbitHoleInHole, scalac compiles and I get back "Rabbit found the hole in Hole package object". (Shouldn't implicits in the local scope take precedence?)
- if I then comment out - rabbitHoleInHolePackage, scalac complains about ambiguities on- rabbitHoleInOuterTestand- rabbitHoleInInnerTest. (Why? In the article by eed3si9n, url listed below, he found implicits btw inner and outer scope can take different precedence.)
- if I then comment out - rabbitHoleInInnerTest, scalac compiles and I get back "Rabbit found the hole in outer Test object".
As you can see, the above behaviors do not follow the rules I've read on implicit resolution at all. I've only described a fraction of combinations you can do on commenting/uncommenting out instances and most of them are very strange indeed - and I haven't gotten into imports and subclasses yet.
I've read and watched presentation by suereth, stackoverflow answer by sobral, and a very elaborate revisit by eed3si9n, but I am still completely baffled.
 
     
    