New functionalities can be added to existent classes by wrapping them with a Value class and adding and implicit methods for converting back and forward form the original class:
class TLong(val value: Long) { def +(other: TLong) = new TLong(value + otehr.value) def decrement = new TLong(value - 1L) override def toString(): String = value.toString; } // implicit methods for conversions implicit def toTLong(l: Long) = new TLong(l) implicit def toLong(tl: TLong) = tl.value // some tests val l1: TLong = new TLong(1) val l2: TLong = new TLong(2) l1 + l2 1L + l2 l1 + 2LFrom Scala 2.10, you can use implicit classes so that you don't have to define conversion methods as they are automatically created:
implicit class ImplicitLong(val l: Long) { def print = l.toString } 1L.print