scala/sbEpDcBase.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 (in base): number literals
class NumD(value: Int) extends BaseD {def eval = value}

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