在https://gist.github.com/satyagraha/897e427bfb5ed203e9d3054ac6705704中,我发布了一个看似合理的 Scala Cats 验证场景,但我还没有找到一个非常简洁的解决方案。
本质上,有一个两阶段验证,其中验证各个字段,然后调用可能由于内部检查而抛出的类构造函数(通常这可能不在我的控制范围内更改,因此是异常处理代码)。如果任何字段验证失败,我们希望不调用构造函数,但也希望将任何构造函数失败合并到最终结果中。“快速失败”绝对适合两阶段检查。
这是一种flatMap
问题,cats.data.Validated
框架似乎通过cats.data.Validated#andThen
操作来处理。但是,正如您在代码中看到的那样,我找不到一个特别巧妙的解决方案。a 上可用的操作数量非常有限cats.syntax.CartesianBuilder
,我不清楚如何将它与andThen
操作联系起来。
欢迎任何想法!请注意,有一个 Cats 问题https://github.com/typelevel/cats/issues/1343可能是相关的,不确定。