Ich begann zu lesen dieses Papier über CRDTs Dies ist eine Möglichkeit, veränderbare Daten gleichzeitig zu nutzen, indem sichergestellt wird, dass die Operationen, die die Daten verändern, kommutativ sind. Es schien mir, dass dies ein guter Kandidat für die Abstraktion in Haskell wäre - eine Typklasse für CRDTs bereitzustellen, die einen Datentyp und Operationen spezifiziert, die auf diesem Typ kommutativ sind, und dann an einer Bibliothek zu arbeiten, um die Aktualisierungen tatsächlich zwischen gleichzeitigen Prozessen zu teilen.
Was ich nicht weiß, ist, wie man den Vertrag, dass Operationen pendeln müssen, in der Spezifikation der Typklasse formuliert.
Ein einfaches Beispiel:
class Direction a where
turnLeft :: a -> a
turnRight :: a -> a
Es gibt keine Garantie dafür, dass turnLeft . turnRight
ist dasselbe wie turnRight . turnLeft
. Ich nehme an, die Alternative ist, das Äquivalent der Monadengesetze zu spezifizieren - einen Kommentar zu verwenden, um Einschränkungen zu spezifizieren, die vom Typsystem nicht erzwungen werden.