class Foo[@specialized(Int) A](a:A) {
  def bar[@specialized(Int) B](f:A => B) = new Foo(f(a))
}

object Test {
  def main(args:Array[String]): Unit = {
    val f = new Foo(333)
    val ms = f.getClass().getDeclaredMethods().map(_.getName).sorted
    ms.foreach(println)
  }
}
