Конструктор фабрики для классов типов в 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 не возвращает объект.

Любая помощь будет очень признательна!

0 ответов

Другие вопросы по тегам