Mic*_*ael 5 monads concurrency scala applicative haxl
这是我先前问题的跟进。
据我从Haxl和Stitch的了解,他们使用monad进行数据访问。monad实际上是一棵数据访问命令树。子节点是节点依赖的命令。兄弟姐妹是同时执行的。
业务逻辑创建单子,然后由一个单独的函数对其进行fetch解释。
现在,问题是:假设我正在同时执行一些数据访问操作。我可以使用一个应用函子(不是monad),它只是命令列表(不是树)。
是否有意义 ?如果列表包含重复的命令怎么办?
我认为通过构造值,Fetch可以避免重复相同查询的可能性,即使在同一轮查询中(当它们是您所说的“兄弟姐妹”时)。如果您查看论文,图 4 解释了 的实现dataFetch,它是值的构造函数Fetch。它解释了三种可能性:
在最后一种情况下,您会注意到返回的值有一个空的BlockedRequests 序列,因为在这种情况下,其他一些Blockedfetch 具有它。这样,当ap使用该值调用该函数时,它不会连接相同的重复请求。
顺便说一句,我一直在尝试在 Scala中实现 Haxl 。