Extension

A collection of values with their associate identifier Id.

// An extension is just a InstanceModel where entities are at least IdEntity[R]. 
trait ExtensionRoot[
  +R,
  +E <: IdEntity[R],
  +InstMem <: InstanceMemoryRoot[E]
] extends Any with InstanceRoot[E, InstMem]

trait Extension[
  +R,
  +E <: IdEntity[R],
  +InstMemImplParam[A] <: InstMemImplicitParam[A, InstanceMemory, InstMemImplParam],
  +InstMem[A] <: InstanceMemory[A] with InstanceMemoryOps[A, InstMem, InstMem[A], InstMemImplParam]
] extends Any
  with ExtensionRoot[R, E, InstMem[E]]
  with CMInstance[E, InstMemImplParam, InstMem]
  with ExtensionOps[R, E, InstMemImplParam, InstMem, CMInstance[*, InstMemImplParam, InstMem], Extension[R, E, InstMemImplParam, InstMem]]

EntityExtension

trait EntityExtension[
  +R,
  +E <: HasEntity[R] with HasId
] extends Any
  with Extension[R, E, InstanceImplicitParam, InstanceMemory]
  with Instance[E]
  with ExtensionOps[R, E, InstanceImplicitParam, InstanceMemory, Instance, EntityExtension[R, E]]

// Entity before Local. The rule is that the nature of carried InstanceMemory entities comes before the nature of the collection (i.e. Local, Array, RDD, ...)

trait EntityLocalExtension[
  +R,
  +E <: HasEntity[R] with HasId
] extends Any
  with LocalExtension[R, E, LocalInstanceImplicitParam, LocalInstanceMemory]
  with EntityExtension[R, E]
  with LocalInstance[HasEntity[R] with HasId]
  with LocalExtensionOps[R, E, LocalInstanceImplicitParam, LocalInstanceMemory, LocalInstance, EntityLocalExtension[R, E]]

RepExtension

First apparition of prefix Rep

trait RepExtension[+R] extends Any
  with EntityExtension[R, HasEntity[R] with HasId]
  with Instance[HasEntity[R] with HasId]
  with ExtensionOps[R, HasEntity[R] with HasId, InstanceImplicitParam, InstanceMemory, Instance, RepExtension[R]]

trait RepLocalExtension[+R] extends Any
  with EntityLocalExtension[R, HasEntity[R] with HasId]
  with RepExtension[R]
  with LocalExtensionOps[R, HasEntity[R] with HasId, LocalInstanceImplicitParam, LocalInstanceMemory, LocalInstance, RepLocalExtension[R]]