scala/ScalaBook/chapter-12/src/main/scala/scalabook/ep/dc/base.scala

package scalabook.ep.dc

/**
 * Base definitions for the Data-Centric approach.
 * @author Christos KK Loverdos
 */

// Base data with a default operation
trait BaseD {
    def eval: Int
}

// 1st concrete data: number literals
class NumD(value: Int) extends BaseD {
    def eval = value
}

// 2nd concreate data: data addition
class PlusD(a: BaseD, b: BaseD) extends BaseD {
    def eval = a.eval + b.eval
}