Let's say I have something like this:
object IceCream {
trait IceCream
case object ChocolateIceCream extends IceCream
case object VanillaIceCream extends IceCream
}
whose source code is not mine, and I cannot change. In another program, I would like to reuse this, and make all ice cream flavors be part of another trait. Am I forced to box them, doing something like this?:
object ThingsILike{
import IceCream._
trait ThingsILike
case object Chocolate extends ThingsILike
case class IceCreamWrapper(x:IceCream) extends ThingsILike
}
or does the language provide a way to naturally extend them (like Swift does)?