If you speak Scala, I recommend that you familiarise yourself with Scala's implicits. The latter are a generalisation of type classes. You can implement the latter using the former, see e.g. [1].
If you speak ML/OCaml/F#, then Oleg's [2] might also be easily accessible.