final case class Entity(...)
final case class State(...)
trait Model[F[_]]{
def getCurrentState(): F[State]
def entityByState(s: State): F[Entity]
def doAction(e: Entity): F[Unit]
def cleanupEntityState(e: Entity): F[Unit] //...???
}
И приложение записывается так
def app[F[_]: Monad](input: String)
for{
s <- getState(input)
e <- getEntity(s)
_ <- doAction(e)
}
Проблема в том, что если в doAction что-то пошло не так, я хочу сделать cleanupState. Стоит ли Monad поменять на MonadError? Или это не очень идея?
Bracket
Обсуждают сегодня