El show
/ read
wird gut funktionieren, ich verwende sie auch, aber nur für kleine Werte. Bei größeren, komplexeren Werten read
wird sehr langsam sein.
Dieses erfundene Beispiel zeigt die schlechte Leistung von read
:
data RevList a = (RevList a) :< a | Nil
deriving (Show, Read)
ghci> read "(((((((((((((((Nil)))))))))))))))" :: RevList Int
Auch, read
nicht in der Lage sein, einige gültige Haskell-Ausdrücke zu lesen, insbesondere solche, die Infix-Konstruktoren verwenden (wie die :<
in meinem Beispiel). Der Grund dafür ist, dass read
ist sich der Unveränderlichkeit der Betreiber nicht bewusst. Dies ist auch der Grund, warum show $ Nil :< 1 :< 2 :< 3
wird eine Menge scheinbar überflüssiger Klammern erzeugen.
Wenn Sie die Serialisierung für größere Werte haben wollen, würde ich vorschlagen, eine andere Bibliothek zu verwenden, wie Daten.Binär . Dies wird etwas komplexer sein als eine einfache show
vor allem wegen des Mangels an deriving Binary
. Es gibt jedoch verschiedene generische Programmierlösungen, die Ihnen deriving
-ähnlichen Surrogaten.
Schlussfolgerung: Ich würde sagen, verwenden Sie die show
/ read
Lösung, bis Sie an ihre Grenzen stoßen (wahrscheinlich, wenn Sie anfangen, tatsächliche Anwendungen zu entwickeln), dann sollten Sie sich nach etwas Skalierbarerem (aber auch Komplexerem) wie Data.Binary umsehen.
Nebenbemerkung: Für diejenigen, die sich für Parser und fortgeschrittenere Haskell-Sachen interessieren: Die Beispiele, die ich gegeben habe, stammen aus dem Papier: Haskel Do You Read Me? auf eine Alternative, schnell read
-ähnliche Funktion.