Type system
The primary objective of a powerful static type system is to reduce the number of bugs and other programming errors. Moreover, static type system often gives benefits in code readability and navigation (with the help of IDEs). However, overusing the type system in Scala leads to code which is very hard to understand. Therefore, most of the advanced techniques which are possible with the Scala type system must be avoided.