Skip to content

Instantly share code, notes, and snippets.

@propensive
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save propensive/f16276b4689f5b1cd8a2 to your computer and use it in GitHub Desktop.
Save propensive/f16276b4689f5b1cd8a2 to your computer and use it in GitHub Desktop.
import language.existentials
trait MetaModel[+M <: Model[M]] {
def speak:String
}
trait Model[+A <: Model[A]] {
self: A =>
}
object A1 extends MetaModel[Model1] { def speak="Model1, A1"}
object B1 extends MetaModel[Model1] { def speak="Model1, B1"}
object A2 extends MetaModel[Model2] { def speak="Model2, A2"}
case class Model1(a: Int) extends Model[Model1]
case class Model2(a: Int, b: String) extends Model[Model2]
object MyTest extends App {
val list = List[MetaModel[T] forSome { type T <: Model[T] }](A1, A2, B1) //Looking to specify type for list.
list.foreach { x => println(x.speak) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment