Благодаря последнему предложению Мартина Одерски на Coursera, я начал играть с scala.util.Try
. Однако я с удивлением обнаружил, что он не обязательно хорошо сочетается с коллекционными монадами, потому что он не реализует scala.collection.GetTraversableOnce
.
Это может пригодиться. Например, вы можете преобразовать список строк в целые числа, выбрасывая плохие, например:
def ints(strs:List[String]):List[Int] = strs.flatMap(s => Try(s.toInt))
Обходной путь прост. Просто преобразуйте Try
в Option
и пусть его неявное преобразование работает для нас:
def ints(strs:List[String]):List[Int] = strs.flatMap(s => Try(s.toInt).toOption)
Мне кажется, что Try
будет либо реализовывать GenTraversableOnce
, либо иметь собственное неявное преобразование. Может ли кто-нибудь объяснить, почему это не так? Это просто факт, что Try
на самом деле не монада?