【发布时间】:2020-03-05 18:18:45
【问题描述】:
我经常做这样的事情:
import cats.effect.Sync
import cats.implicits._
case class User(name: String)
case object Error extends Exception
def validate[F[_]: Sync](name: String): F[Either[Error, User]] = Sync[F].pure(User(name).asRight)
def doSomething[F[_]: Sync]: F[User] = for {
maybeUser <- validate("Name")
user <- maybeUser.fold(Sync[F].raiseError[User](_), Sync[F].pure(_))
} yield user
简而言之,如果Either 是left,则使用raiseError,如果是right,则返回值。
有没有更方便的方式“解包”Either?
【问题讨论】:
标签: scala functional-programming scala-cats cats-effect tagless-final