【发布时间】:2019-09-26 03:41:52
【问题描述】:
很久以前,我们团队内部就使用Try[A] 与Either[Throwable, A] 进行了长期争论,最终我们选择了Try[A],因为当Either 的左侧是Throwable 时,它们在语义上是相同的。那个时候我正在寻找一个使用Either[Throwable, A]的代码库,但我找不到。
但是今天在观看 Fabio Labella 在How do Fibers Work? A Peek Under the Hood 上的演讲时, 下面的签名让我印象深刻
def async[A](k: (Either[Throwable, A] => Unit) => Unit): F[A]
所以我的问题是,使用Either[Throwable, A] 代替Try[A] 有什么具体原因吗?推荐哪一个?
【问题讨论】:
-
恰好
Try[A]与Either[Throwable, A]同构。我的问题是,有什么理由使用Either[Throwable, A]还是只是个人选择? -
这可能与 Try 不是 Monad(几乎是 monad,但不完全是)这一事实有关。 Cats 是纯函数式编程库,因此他们可能决定使用纯函数式结构。
标签: scala error-handling functional-programming scala-cats