Конструктор фабрики для классов типов в Scala3
При построении классов типов в Scala обычной практикой является создание конструктора фабрики, который может упростить реализацию класса типов для многих типов.
В качестве примера у нас может быть такой класс типа:
trait SqlTypeConversion[-A] {
def getType: SqlType
}
object SqlTypeConversion {
def apply[A](implicit a: SqlTypeConversion[A]): SqlTypeConversion[A] = a
/** Factory constructor */
def instance[A](sqlType: SqlType): SqlTypeConversion[A] =
new SqlTypeConversion[A] {
def getType: SqlType = sqlType
}
}
и это позволяет нам делать что-то вроде:
implicit val intType: SqlTypeConversion[Int] = instance(???)
implicit val longType: SqlTypeConversion[Long] = instance(???)
В Scala 3 мы бы написали такую реализацию:
given SqlTypeConversion[Int] with {
def getType: SqlType = ???
}
Но есть ли способ создать «фабричный конструктор» для нового синтаксиса?
Я пробовал с
def instance[A](sqlType: SqlType): SqlTypeConversion[A] =
given SqlTypeConversion[A] with {
def getType: SqlType = sqlType
}
Но это не удается, поскольку
given
не возвращает объект.
Любая помощь будет очень признательна!