package test; import scala.collection.mutable._; trait CompleteLattice { trait Elem; } trait DataFlowAnalysis[L <: CompleteLattice] { type P; val lattice : L; val out: Map[P, lattice.Elem] = new HashMap; } abstract class Liveness { object livenessLattice extends CompleteLattice; final class LivenessAnalysis extends DataFlowAnalysis[livenessLattice.type] { type P = String; val lattice = livenessLattice; } }