val bar: Bar = Bar(100) assert(bar == Bar(100)) val foo: Bar = bar.f(10) assert(foo == Bar(10)) /* * scala> val foobar: Option[Bar] = foo.g(1) * <console>:12: error: type mismatch; * found : Option[Foo] * required: Option[Bar] * val foobar: Option[Bar] = foo.g(1) * ^ */ val baz: String = foo.h assert(baz == "hoge")