Scala : 是否有更简洁的方法来编写以下高级方法?

问题描述 投票:0回答:0

UserRepository trait 有两种方法

isRegistered
insert
.

trait UserRepository[F[_]] {
  def insert(user: domain.User): F[Long]
  def isRegistered(user: domain.User): F[Boolean]
}

边界类是核心应用的边界。对于这个例子,它只有一个方法

register
,只有当它不存在时才创建一个新用户。

class Boundary[F[_]: Monad] private (userrepo: UserRepository[F]) {

  def registerUser(user: User): F[Either[UserAlreadyRegistered, Long]] =
    userrepo.isRegistered(user).flatMap {
      case true  =>
        UserAlreadyRegistered(user).asLeft[Long].pure[F]
      case false =>
        for {
          id <- userrepo.insert(user)
          errorOrId = id.asRight[UserAlreadyRegistered]
        } yield errorOrId
    }
}

我的问题是有没有更简洁的方法来实现

registerUser
方法。我在项目中使用了cats core。

scala scala-cats tagless-final
© www.soinside.com 2019 - 2024. All rights reserved.