У меня есть куча классов типов хранилищ данных, которые выглядят одинаково.
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
. Что означает ошибка и возможно ли это? Если нет, есть ли другой способ сделать то же самое?