2012-10-11 5 views
6

Die Erweiterung der Sexplib-Syntax ermöglicht die einfache Serialisierung und Deserialisierung beliebiger benutzerdefinierter Datenstrukturen in OCaml. Es wird in der Regel durch Zugabe einer with sexp Anmerkung zum Ende einer Typdefinition getan:Wie kann sexplib mit Funktortypen wie Map verwendet werden?

type a = A of int | B of float with sexp 

Dies scheint nicht direkt an Funktors-basierten Typen zu verallgemeinern, noch ist es klar, wie der Sexplib Standard-Typ-Wandler erfassen kann sogar die Standard-Funktoren.

Bisher habe ich daran gearbeitet, indem ich eine bestimmte Map type Instanz (zB int Map.Make(String).t) in eine Liste vor der Serialisierung abgeflacht habe und umgekehrt, aber dies wurde von den allgemein ambitionierten Autoren von Sexplib/Jane nicht völlig übersehen Straßenkern. Ich merke auch, dass ältere Versionen von Batterien in benutzerdefinierten sexp Serialisierung zu ihren wichtigsten Modulen wie [Bat] Map mischen, aber das wurde für einige Zeit entfernt.

Wie werden Maps oder andere komplexe Funktortypen häufig mit der Sexplib-Serialisierung verwendet?

+2

Ich denke, dass Sie eine erweiterte Standardbibliothek mit pervasive Sexplib-Konvertierungsfunktionen dafür verwenden würden. Hast du auf Core geschaut? Ich habe nur 5 Minuten damit verbracht, aber in diesen 5 Minuten habe ich den Funktor 'Set.Make' angewendet und mich nach Sexplib-Konvertierungsfunktionen für den Argumenttyp gefragt, damit er Sexplib-Konvertierungsfunktionen für den resultierenden Settyp erstellen kann. –

Antwort

1

Eine Möglichkeit besteht darin, einen neuen Funktor zu definieren, der die zusätzlichen Informationen aufnimmt, die zum Serialisieren der Daten benötigt werden. Hier ist eine vollständige Implementierung, die ich in der Vergangenheit mit Batterien verwendet habe. Hinweis: Ich bevorzuge auch die ausnahmslose und beschriftete Version von Map, also habe ich diese geöffnet, aber Sie könnten das natürlich entfernen.

Wenn ich mich richtig erinnere, entfernt Batterien solche Funktionen, um Abhängigkeiten von zusätzlichen Bibliotheken zu reduzieren. Ihre andere Option ist die Verwendung von Core, das diese Funktionen sofort zur Verfügung stellt.

Verwandte Themen