Skip to content

Instantly share code, notes, and snippets.

@stephanos
Last active December 14, 2015 09:48
Show Gist options
  • Save stephanos/5067477 to your computer and use it in GitHub Desktop.
Save stephanos/5067477 to your computer and use it in GitHub Desktop.
import net.liftweb.mongodb.record.field.ObjectIdField
import net.liftweb.mongodb.record.{MongoMetaRecord, MongoRecord}
import net.liftweb.record.field.IntField
// ==== BASE
trait BaseDoc[T <: BaseDoc[T]] extends MongoRecord[T] {
self: T =>
def id = _id.value
object _id extends ObjectIdField(this.asInstanceOf[T])
object int extends IntField(this.asInstanceOf[T])
}
trait BaseMeta[T <: BaseDoc[T]] extends MongoMetaRecord[T] {
self: T =>
}
// ==== DOC #1
class BaseDoc1 extends BaseDoc[BaseDoc1] {
def meta = BaseMeta1
}
object BaseMeta1 extends BaseDoc1 with BaseMeta[BaseDoc1]
// ==== DOC #2
class BaseDoc2 extends BaseDoc[BaseDoc2] {
def meta = BaseMeta2
}
object BaseMeta2 extends BaseDoc2 with BaseMeta[BaseDoc2]
// ==== FACTORY
case class Mod(num: Int) {
def doc: BaseMeta[_] = // WRONG
num % 2 match {
case 0 => BaseMeta1
case _ => BaseMeta2
}
}
object Main extends App {
val doc = Mod(0).doc.createRecord.int(5)
}
error: value int is not a member of _$1
val doc = Mod(0).doc.createRecord.int(5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment