Implicits are a powerful, code-condensing feature of Scala, considered by some users "the second hardest feature, first being to convince your manager to use Scala". With implicits, dependencies are resolved at compile-time, code base size is drastically reduced by removed boilerplate, classes are loosely coupled, extendable and yet type safe.
A great feature, so what is it so hard?
The implicit system allows the compiler to adjust code using a lookup mechanism and to solve implicit ambiguities using some precedence rules. The multitude of rules of implicits resolution algorithm and the compiler converting types leads to hard-to-debug and possibly dangerous behavior - associating implicits feature with mystery, magic and controversy.
Throughout this presentation, we'll try to better understand what implicits are and how we can use them. In the mean time, we'll zoom into the resolution mechanism to understand some of its rules — basically we'll try to learn how to unleash implicits' great power and to diminish the associated confusion.