这是我之前的question的后续内容。

据我从HaxlStitch理解,它们使用monad进行数据访问。 monad实际上是一棵数据访问命令树。子节点是节点依赖的命令。兄弟姐妹是同时执行的。

业务逻辑创建单子,然后由单独的函数fetch对其进行解释。

现在,问题是:假设我正在同时执行一些数据访问操作。我可以使用一个应用函子(不是monad),它只是命令列表(不是树)。

是否有意义 ?如果列表包含重复的命令怎么办?

最佳答案

我认为通过构造Fetch值,即使在同一轮查询中(当您说的是“兄弟”时),也避免了重复同一查询的可能性。如果您看一下本文,图4解释了dataFetch的实现,它是Fetch值的构造函数。它说明了三种可能性:


该请求从未被提出过
该请求已在AND完成之前提出
该请求之前已提出,但尚未完成


在最后一种情况下,您会注意到返回的值具有一个空的BlockedRequest序列,因为在这种情况下,其他一些Blocked提取操作都有它。这样,当使用该值调用ap函数时,它将不会连接相同的重复请求。

顺便说一句,我一直试图在Scala here中实现Haxl。

09-08 05:12