And in fact, if you combine implicit classes with values classes (e.g. implicit class RichFoo(val value: Foo) extends AnyVal { ... }) then you&#x27;re effectively just adding extension methods, and there&#x27;s not even an allocation involved.