Scala中的任何一种,尝试和验证

Mic*_*ael 7 error-handling monads scala scalaz

我很困惑与Either,TryValidationscalaz.他们似乎没有做我需要的事情.我需要的是一个简单的monad Result[E, R],它E是一个错误类型,R是一个结果类型.

  • Either是不合适的,因为它不是单子(但是预测是)并且没有偏见.
  • Try是不合适的,因为它的错误类型是Throwable,它不完全是monad
  • Validation 根本不是一个单子.

你会建议什么?我应该自己写这种Result类型吗?

Tra*_*own 8

如果你愿意使用Scalaz(听起来像你),\/(通常发音为"disjunction")正是你正在寻找的 - 一个monadic,正确偏见的版本Either.

它还包括许多其他很好的东西,你没有得到Either标准库中的正确投影(1.right语法,组合+++Validation,如转换器等).