Repositório genérico reutilizável Slick 3

Estou tendo problemas ao fazer o TableQuery do Slick usado de maneira genérica.

Observe a situação regular:

class AccountRepository {
override protected val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)
val accounts = TableQuery[Accounts]
def all = db.run(accounts.result)
...

A idéia seria extrair todo o possível em traços genéricos ou classes abstratas para evitar repetições. Por uma questão de simplicidade, incluí apenas o código problemático.

abstract class GenericRepository[T] extends HasDatabaseConfig[JdbcProfile] {
override protected val dbConfig = DatabaseConfigProvider.get[JdbcProfile(Play.current)
val table = TableQuery[T]
}

E para usá-lo como:

class AccountRepository extends GenericRepository[Accounts] {

No entanto, isso cria um erro de compilação:

argumentos de tipo [T] estão em conformidade com os limites de nenhuma das alternativas sobrecarregadas de valor aplicáveis: [E <: slick.lifted.AbstractTable []] => slick.lifted.TableQuery [E] [E <: slick.lifted.AbstractTable []] (contras: slick.lifted.Tag => E) slick.lifted.TableQuery [E]

Tentar corrigir o problema definindo um limite também não ajuda.

abstract class GenericRepository[T <: slick.lifted.AbstractTable[T]] extends HasDatabaseConfig[JdbcProfile] {

No entanto, acabamos com um erro diferente:

tipo de classe necessário, mas T encontrado

no seguinte local:

val table = TableQuery[T]

Alguma idéia sobre a solução?

questionAnswers(2)

yourAnswerToTheQuestion