10 Stimmen

Wie kann ich festlegen, dass zwei Operationen in einer Typklasse vertauscht werden?

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X