ArrowKt Попробуйте альтернативу для нетерпеливого исполнения - PullRequest
0 голосов
/ 20 января 2020

ArrowKt устарел Попробуйте , поскольку он способствует быстрому выполнению эффектов и рекомендует использовать конструкторы приостановки. Но как мне справиться со следующим случаем, когда я хочу целенаправленного выполнения без использования традиционного try-catch .

 fun getMainAccount(accounts: List<String>): Either<Exception, String> {  
   return Try {
     accounts.single()
   }.toEither().mapLeft {
     InvalidAccountError()
   }
 }

1 Ответ

3 голосов
/ 20 января 2020

Нет необходимости в какой-либо специальной конструкции, кроме try/catch в Kotlin, поскольку она также уже является выражением. По этой причине он был удален из Arrow, вы можете просто написать:

fun getMainAccount(accounts: List<String>): Either<Exception, String> =  
   try {
     Right(accounts.single())
   } catch(e: Exception) {
     Left(InvalidAccountError())
   }

Или вы также можете легко написать для него служебную функцию.

fun <A> Try(f: () -> A, fe: ): Either<Exception, A> = 
   try {
     Right(f())
   } catch(e: Exception) {
      Left(e)
   }

fun getMainAccount(accounts: List<String>): Either<Exception, String> =
   Try { accounts.single() }.mapLeft { InvalidAccountError() }
...