scala type class
Encode the Expression Problem in Scala 2.x (from: https://scalac.io/blog/typeclasses-in-scala/): trait Show[A] { def show(a: A): String } object Show { def apply[A](implicit sh: Show[A]): Show[A] = sh //needed only if we want to support notation: show(...) def show[A: Show](a: A) = Show[A].show(a) implicit class ShowOps[A: Show](a: A) { def show = Show[A].show(a) } //type class instances implicit val intCanShow: Show[Int] = int => s"int $int" implicit val stringCanShow: Show[String] = str => s"string $str" }