Зависимые типы методов и классы типов

У меня есть куча классов типов хранилища данных, которые выглядят одинаково.

trait FooStore[C] {
  def create(f: FooId => Foo)(c: C): Foo
  // update and find methods
}

Я хотел бы все упростить и надеялся использовать зависимые типы методов, чтобы приблизиться к

sealed trait AR {
  type Id
  type Type
}

sealed trait FooAR extends AR {
  type Id = FooId
  type Type = Foo
}

trait DataStore[C] {
  def create(ar: AR)(f: ar.Id => ar.Type)(c: C): ar.Type
}

, но когда я пытаюсь создать его экземпляр следующим образом

case class InMemory(foos: List[Foo])
object InMemory {
  lazy val InMemoryDataStore: DataStore[InMemory] = new DataStore[InMemory] {
    def create(ar: AR)(f: ar.Id => ar.Type)(c: InMemory): ar.Type = sys.error("not implemented")
  }
}

, я получаю следующую ошибку компиляции

object creation impossible, since method create in trait DataStore of type (ar: AR)(f: ar.Id => ar.Type)(c: InMemory)ar.Type is not defined
  lazy val InMemoryDataStore: DataStore[InMemory] = new DataStore[InMemory] {
                                                        ^
one error found

Я не понимаю, так как этот метод довольно четко определен в экземпляре DataStore. Что означает ошибка и возможно ли это? Если нет, есть ли другой способ сделать то же самое?

8
задан purefn 25 March 2012 в 03:19
поделиться