http://www.scala-lang.org/old/node/8002