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
Обсуждают сегодня