Чтобы скомпилированный макрос работал правильно, вам нужны неявные параметры для этого макроса в области видимости.Поскольку черты не принимают неявные параметры, я делаю эти черты абстрактными классами.
abstract class Fn1[A, P, E, U, C[_]](implicit ashape: Shape[ColumnsShapeLevel, A, P, A], pshape: Shape[ColumnsShapeLevel, P, P, _]) {
protected def asc(a1: A): Query[E, U, C]
lazy val Asc = Compiled(asc _)
}
Несколько более простой вариант можно использовать, если a1
всегда является Rep[P]
abstract class Fn2[P, E, U, C[_]](implicit btt: slick.ast.BaseTypedType[P]) {
protected def asc(a1: Rep[P]): Query[E, U, C]
lazy val Asc = Compiled(asc _)
}
Примечание: Если вы не хотите использовать абстрактные классы, вы можете определить неявное определение следующим образом:
trait Fn3[P, E, U, C[_]] {
implicit def baseTypedTypeP: slick.ast.BaseTypedType[P]
protected def asc(a1: Rep[P]): Query[E, U, C]
lazy val Asc = Compiled(asc _)
}
При реализации этой черты вы должны иметь возможность реализовать ее следующим образом (если тип известен):
implicit def baseTypedTypeP: slick.ast.BaseTypedType[Long] = implicitly