Working with implicits can be a complete nightmayer. The scala plugin is improving, but not quite there yet. Sometimes it is able to tell me which implicit is being used but sometimes gets it wrong. However, in the cases where no implicit is found, what I really need is a debug environment to let me drill down into the available implicits that where rejected, find out why they where, and work through adding hints to get it working.
Typically, if an implicit isn't found, I end up passing in the implicit using implicitly[Foo], and then if that isn't working, perhaps replacing this with an explicit reference to the implicit I think should be used. This is very time-consuming and error-prone. You end up stubbing in a lot of things that where being inferred correctly, and when the time comes to unstub step-by-step, you can get into a muddle. Also, you have to make a lot of choices about type parameters that are painful to get right and to get consistent, particularly when the implicit resolution process is being used to do type inference.
What I'd really like is an environment for exploring and debugging implicits. At the site where the implicit needs to be inferred, I'd like to be able to pop up a box that shows each implicit parameter as an expression, highlighting any that are problems. For those, I'd like to be able to select the one I was intending to be used, and get a justification back for why it is not being. If it itself relies upon an implicit, I want to be able to do this recursively. If it is using one implicit and I think it should be using another, I'd like to know why it picked the 'wrong' one - is it more specific, or does mine not apply for some reason? Perhaps there's a type parameter that I want to explicitly pin. Red could be used for the broken implicit, grey for one that matches and is the one that scalac will use, black for the implcits and type params I've manually selected that scalac would not have for whatever reason. Something like that.
Oh, and for moon-on-a-stick bonus points, I'd like this environment to stay live as I move implicits into and out of scope, and as I edit the defs, objects and vals that are implicit.
How much of this is possible, given how the scala plugin handles implicits now? It would be a real selling point for the plugin IMHO for people developing libraries like scalala and scalaz that relie heavily upon implicits.