我有以下我要改进的代码段:
final case class GenderOps[F[_]]()
(implicit xa: Transactor[F],
ev: Bracket[F, Throwable]) extends GenderDb[F] {
override def create: F[Int] =
sql"""
CREATE TABLE interests
(
id smallserial NOT NULL,
interest character varying(40) NOT NULL,
PRIMARY KEY (id)
)
""".update.run.transact(xa)
override def seed[L[_] : Foldable](v: L[Gender]): F[Int] = ???
您可以在代码上看到,case class
具有空参数。是否可以避免case class
?
这将是更好的模制方法:
sealed trait GenderDb[F[_]] {
def create: F[Int]
def seed[L[_] : Foldable](v: L[Gender]): F[Int]
}
object GenderDb {
def apply[F[_]](implicit xa: Transactor[F], ev: Bracket[F, Throwable]): GenderDb[F] = new GenderDb[F] {
override def create: F[Int] =
sql"""
CREATE TABLE interests
(
id smallserial NOT NULL,
interest character varying(40) NOT NULL,
PRIMARY KEY (id)
)
""".update.run.transact(xa)
override def seed[L[_] : Foldable](v: L[Gender]): F[Int] = ???
}
}
case class Foo
Foo // does this refer to companion object or to construction via Foo.apply()?
没有参数列表或空参数列表的案例类应该改为case object
case object Foo // instead of case class Foo()
但是对象不使用类型参数
case object Foo[T] // syntax error
考虑到名称Ops
中的GenderOps
后缀,看来您的意图是使用一些方法来丰富某些类,这些方法指示案例类或案例对象可能不是正确的工具。如果您想通过扩展方法来丰富,请考虑使用trait或隐式类。