使用monads进行批量转换?

Dus*_*etz 5 error-handling monads clojure

刚开始grok monads.我认为在Clojure中,纯度对我来说并不是非常重要.

我有一系列可能失败的业务操作(可组合转换).这可以用error-monad很好地抽象出来.

一些业务操作涉及数据库IO,我需要批量执行操作以提高速度.每个批量操作都作用于一组独立的项目,因此一个失败不得使整个集合失败.

我是否应该将我的批量转换视为一个对象(map)上的一系列函数,这些函数在诸如error monad之类的内容中完成但在seq中作用于独立项?seq-monad帮助我吗?我该怎么想这个?还有其他想法吗?

在Clojure中我将数据库副作用与IO-monad相结合,我认为没有任何特别的好处,对此有何想法?

Ale*_*sky 1

很难确切地说出您需要什么,因为您的业务案例似乎有点复杂,但我认为您可能会从使用 clojure.algo.monads 库中获益。

您可以在内部处理批次的 error-monad 或 Maybe-monad 上创建自己的变体。