Type classes as objects and implicits
an overview of the scala programming language .