Нет необходимости в какой-либо специальной конструкции, кроме 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() }