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)
選言から結果を抽出しますが、これはかなり醜いと思います。
そのような「明らかに単純化可能な構造」を捉える抽象化はありますか? それとも、選言はその問題の正しい抽象化ではありませんか?