Параллельный доступ к данным как в Haxl и Stitch

Это продолжение моего предыдущего вопроса.

Как я понял из Haxl и Stitch, они используют монаду для доступа к данным. Монада - это дерево команд доступа к данным. Дочерние - это команды, от которых зависит узел. Братья и сестры исполняются одновременно.

Бизнес-логика создает монаду, а затем отдельную функцию fetch интерпретирует это.

Теперь вопрос: предположим, я выполняю несколько операций доступа к данным одновременно. Я могу использовать аппликативный функтор (не монаду), который представляет собой просто список команд (не дерево).

Имеет ли это смысл? Что если список содержит дублирующиеся команды?

1 ответ

Я думаю, что при построении Fetch В значениях исключается возможность повторения одного и того же запроса, даже в одном раунде запросов (когда вы говорите "братья и сестры"). Если вы посмотрите на документ, рисунок 4 объясняет реализацию dataFetch, который является конструктором Fetch ценности. Это объясняет три возможности:

  1. Запрос никогда не был сделан раньше
  2. Запрос был сделан до И он был выполнен
  3. Запрос был сделан ранее, но еще не завершен

В последнем случае вы заметите, что возвращаемое значение имеет пустую последовательность BlockedRequestс, потому что в этом случае некоторые другие Blocked принеси это. Таким образом, когда ap функция вызывается с этим значением, она не будет объединять один и тот же повторный запрос.

Кстати, я пытался реализовать Haxl в Scala здесь.

Другие вопросы по тегам