Haskell Riak 客户端中地图的 CRDT 操作

CRDT ops for Map in Haskell Riak client

如何创建一个包含 Register 名称 username 和值 test 的简单 Riak CRDT Map?我正在看这个 documentation here 但不明白 XPath 和地图中寄存器的名称是如何连接的。

这是我想要做的:create/update Map 具有 Register 名称 username 和值 test(在桶类型 mapbucket、存储桶 uinfo、密钥 test1)。这是 Erlang 客户端将如何执行此操作(未测试 - 从我编写的另一个代码修改复制粘贴):

  Map = riakc_map:new(),
  Map1 = riakc_map:update({<<"username">>, register},
                         fun(R) -> riakc_register:set(<<"test">>, R) end,
                         Map),
  {ok, Pid} = riakc_pb_socket:start_link("127.0.0.1", 8087),
  riakc_pb_socket:update_type(Pid,{<<"mapbucket">>,<<"uinfo">>},"test1",riakc_map:to_op(Map1))

我搜索了 github 代码存储库,但在 Haskell Riak 客户端中找不到任何示例。如果任何熟悉 Haskell Riak 客户端和 CRDT ops 的人可以提供有关如何执行上述操作的指示,我将不胜感激。

我知道怎么做了。 Map 中的 xpath 似乎是一个递归选择器,用于访问深埋在地图中另一个地图中的字段。因此,对于地图中的顶级字段,xpath 将只是该字段名。于是,解变成:

-- get the connection to 127.0.0.1:8087
conn <- connect defaultClient 

-- xpath here is just "username" fieldname - we use RegisterSet operation
-- Alternatively, for xpath value, you can do: ("username" :| []), especially, if
-- passing it as argument in a function
let op = "username" `mapUpdate` RegisterSet "test" 


-- send off the above operation to create/update the map
sendModify conn "mapbucket" "uinfo" "test1" [op]