2013-08-30 9 views
5

Ich schreibe gerade ein Online-Spiel, in dem ich Haskell für das serverseitige Backend und Elm für das Frontend/Rendering verwende.Hat Elm ein Äquivalent von Haskells "Read"

Im Moment habe ich meinen GameState als einen großen ADT, in einem Typ, der einfach genug ist, dass ich ihn auch in Elm verwenden kann. Ich hatte gehofft, JSON zu vermeiden, und Elm einfach die Ausgabe von "show" auf den Daten zu übergeben, die ich dann in Elm zu einem ADT analysieren konnte.

Ich frage mich, gibt es etwas gleichbedeutend mit Haskell "lesen", die automatisch auf eine Zeichenfolge von Show anzeigen, und analysieren sie zurück in Daten? Wenn nicht, gibt es vorhandene Parser-Bibliotheken für Elm?

Wenn ich am Ende mit JSON gehe, gibt es eine Möglichkeit, es automatisch in einen ADT umzuwandeln? (Etwas Ähnliches zu Aeson des FromJSON vielleicht?)

Antwort

4

Mein Verständnis ist, dass Elm-nicht mit typeclasses-kann nicht einfach eine polymorph Version von read oder fromJSON haben. Ich glaube auch nicht, dass es irgendwelche guten Einrichtungen für generische Programmierung hat, so dass die Implementierung von etwas ähnlich wie deriving oder OCamls with auch schwierig wäre.

Leider bedeutet dies, dass Sie am besten einmalige Funktionen zum Serialisieren und Deserialisieren der verschiedenen Typen schreiben können. Sie können Aeson auf der Haskell-Seite verwenden und dann Funktionen in/aus JSON mit Elm's JSON library schreiben.

Eine andere Möglichkeit könnte sein, den von Haskells deriving Read erzeugten Code erneut zu verwenden und ihn nach Elm zu portieren. Dies könnte jedoch mehr Arbeit sein, als es wert ist, und ich bin mir nicht sicher, wie ich genau verfahren soll.

+0

Dies ist genau der Grund, warum ich mich entschieden habe auf Ulme zu warten, bevor ich sie ernsthaft benutze. –

+0

@johanatan was verwendest du für das Frontend? JavaScript hat auch keine Typklassen. –

+1

@samboosalis: Sie können Haskell mit Haste oder GHCJS zu JavaScript kompilieren, die beide Typklassen unterstützen. –