在 Web 应用程序中,我有一个动作可能会以各种不同的方式失败,或者最终会成功。
在这种情况下,成功和失败由 SimpleResult 的子类表示(表示 HTTP 响应)
我使用 scalaz / 上的一元操作来编码我的算法,例如:
val result = for {
user <- fetchUser \/> Forbidden("you must be connected to perform this action")
basket <- user.basket \/> NotFound("no basket !")
...
} yield Ok(someBasketView(user, basket))
所以这最终是一个SimpleResult \/ SimpleResult
,我必须写这个:
result fold (identity, identity)
从析取中提取结果,我觉得这很丑陋。
是否有一些抽象可以捕捉到这种“明显可简化的结构”?或者也许析取不是正确的抽象?