5

私はよく次のようなことをします:

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

一言で言えば、それがただの戻り値ならif Eitheris leftthen useを意味します。raiseErrorright

「アンラップ」 するより便利な方法はありEitherますか?

4

1 に答える 1