У меня есть тип Result<V, E>
, где V
- это тип значения, а E
- это тип ошибки.
Я пытаюсь реализовать монадное понимание так, чтобы я мог сделать это:
val result: Result<Int, String> = binding {
val value = someMethodReturningResult().bind()
val value2 = someOtherMethodReturningResult().bind()
value + value2
}
Я попытался реализовать метод bind()
, чтобы вызвать исключение, содержащее ошибку, если результатом является сбой, или же вернуть значение.
Следовательно, функция binding
содержитtry / catch, который возвращает Result
с либо сгенерированной ошибкой, либо с возвращенным значением.
Поскольку исключения не могут содержать универсальные типы, я должен преобразовать ошибку в Any
до выброса, а затем вернуть ее обратнов блоке улова.Хотя это работает, это не безопасно.Кто-то может добавить вызов к someThirdMethodReturningResult().bind()
, который имеет другой тип для ошибки, и это не должно быть разрешено.
Есть ли способ обеспечить, чтобы каждый вызов к bind()
имел одинаковый тип дляошибка?