这是我之前的question的后续内容。
据我从Haxl和Stitch理解,它们使用monad进行数据访问。 monad实际上是一棵数据访问命令树。子节点是节点依赖的命令。兄弟姐妹是同时执行的。
业务逻辑创建单子,然后由单独的函数fetch
对其进行解释。
现在,问题是:假设我正在同时执行一些数据访问操作。我可以使用一个应用函子(不是monad),它只是命令列表(不是树)。
是否有意义 ?如果列表包含重复的命令怎么办?
最佳答案
我认为通过构造Fetch
值,即使在同一轮查询中(当您说的是“兄弟”时),也避免了重复同一查询的可能性。如果您看一下本文,图4解释了dataFetch
的实现,它是Fetch
值的构造函数。它说明了三种可能性:
该请求从未被提出过
该请求已在AND完成之前提出
该请求之前已提出,但尚未完成
在最后一种情况下,您会注意到返回的值具有一个空的BlockedRequest
序列,因为在这种情况下,其他一些Blocked
提取操作都有它。这样,当使用该值调用ap
函数时,它将不会连接相同的重复请求。
顺便说一句,我一直试图在Scala here中实现Haxl。