import com.foursquare.rogue.LiftRogue._import net.liftweb.mongodb.record.{MongoRecord, MongoMetaRecord}// ==== BASEtrait BaseDoc[T <: MongoRecord[T]]extends MongoRecord[T] {self: T =>object id}trait BaseMeta[T <: BaseDoc[T]]extends MongoMetaRecord[T] {self: T =>}// ==== DOC #1class BaseDoc1 extends BaseDoc[BaseDoc1] {def meta = BaseMeta1}object BaseMeta1 extends BaseDoc1 with BaseMeta[BaseDoc1]// ==== DOC #2class BaseDoc2 extends BaseDoc[BaseDoc2] {def meta = BaseMeta2}object BaseMeta2 extends BaseDoc2 with BaseMeta[BaseDoc2]// ==== QUERYcase class Mod(num: Int) {def doc: BaseMeta[_] with BaseDoc[_] = // WRONGnum % 2 match {case 0 => BaseMeta1case _ => BaseMeta2}}object Main {val doc = Mod(0).docdoc.where(_._id eqs 42)}
error: value where is not a member of BaseMeta[_] with BaseDoc[_]doc.where(_._id eqs 42)
Obviously the implicit conversation is not triggered because the return type of doc is wrong.But how do I fix it?RegardsStephan
import net.liftweb.mongodb.record.field.ObjectIdFieldimport net.liftweb.mongodb.record.{MongoMetaRecord, MongoRecord}import net.liftweb.record.field.IntField
// ==== BASEtrait BaseDoc
extends MongoRecord[BaseDoc] {def id = _id.valueobject _id extends ObjectIdField(this)object int extends IntField(this)}trait BaseMetaextends MongoMetaRecord[BaseDoc] {self: BaseDoc =>}// ==== DOC #1class BaseDoc1 extends BaseDoc {
def meta = BaseMeta1}object BaseMeta1 extends BaseDoc1 with BaseMeta
// ==== DOC #2class BaseDoc2 extends BaseDoc {
def meta = BaseMeta2}object BaseMeta2 extends BaseDoc2 with BaseMeta
// ==== QUERYcase class Mod(num: Int) {def meta: BaseMeta with BaseDoc =
num % 2 match {case 0 => BaseMeta1case _ => BaseMeta2}}
object Main extends App {import com.foursquare.rogue.LiftRogue._val doc = Mod(0).metadoc.where(_.int eqs 42)}