Yes! We call this the "Merge Type" of data in the braid.org group.
Each datum as both a data type and a merge type. The programmer just needs to specify these two types, and then the programming runtime can choose which synchronization algorithm to use.
Re:You might not need a CRDT
by preseinger on Tuesday December 06, 2022 @02:46PM
(#33885956)
Er, how can you express the merge operation as a type?
See https://raw.githubusercontent.com/braid-org/braid-spec/maste...
And for a more intuitive explanation, this might help: https://braid.org/demo/interact#a-merge-type-defines-how-to-...
Re:You might not need a CRDT
by preseinger on Wednesday December 07, 2022 @06:40PM
(#33901994)
> A Merge Type is a function
Er, okay, if you redefine "type" to mean "function" then sure.
I'm still trying to learn CRDTs; but early on in my learning process i had the thought that CRDTs don't have mere data types - as you say, they have Data Type + Conflict Resolution bundled into one. It's not enough to make a String type, because different types need to be resolved differently. Plus some types of resolution have a lot more metadata, so you want to choose the best fitting one.
I found that my goal to make SQL + CRDT meant i had to expose this combo of Type + Resolution to the end user. It seems essential to how the app works.
But maybe i don't know anything, /shrug. I'm still learning them.