2013-08-30 1 views
5

Je suis en train d'écrire un jeu en ligne où j'utilise Haskell pour le backend côté serveur et Elm pour le frontend/rendu.Est-ce que Elm a un équivalent de "Read" de Haskell?

À l'heure actuelle, j'ai mon GameState comme un gros ADT, dans un type assez simple pour que je puisse l'utiliser aussi dans Elm. J'espérais éviter d'utiliser JSON, et simplement passer Elm la sortie de "show" sur les données, que je pourrais ensuite analyser dans un ADT dans Elm.

Je me demande, est-ce qu'il y a quelque chose d'équivalent à "read" de haskell qui peut automatiquement regarder une chaîne sortie par show, et l'analyser de nouveau en données? Si non, existe-t-il des librairies-analyseurs disponibles pour Elm?

Si je finis par utiliser JSON, est-il possible de le convertir automatiquement en ADT? (Quelque chose de semblable à FromJSON de Aeson, peut-être?)

Répondre

4

Je crois comprendre que Elm-ne pas avoir ne peuvent-classes de types ont facilement une version polymorphes de read ou fromJSON. Je ne crois pas non plus qu'il y ait de bonnes installations pour la programmation générique, donc mettre en œuvre quelque chose de semblable à deriving ou with d'OCaml serait également difficile. Malheureusement, cela signifie que votre meilleur pari est d'écrire des fonctions uniques pour sérialiser et désérialiser les différents types que vous utilisez. Vous pouvez utiliser aeson du côté Haskell, puis écrire des fonctions depuis/vers JSON en utilisant Elm's JSON library.

Une autre option peut être d'essayer de réutiliser le code produit par deriving Read de Haskell et de le porter à Elm. Cependant, cela pourrait être plus de travail que de valeur, et je ne suis pas sûr de savoir comment s'y prendre, exactement.

+0

C'est exactement pour cette raison que j'ai décidé d'attendre que l'orme mûrit davantage avant de l'utiliser sérieusement. –

+0

@johanatan qu'est-ce que vous utilisez pour le frontend? JavaScript n'a pas non plus de classes de types. –

+1

@samboosalis: Vous pouvez compiler Haskell en JavaScript avec Haste ou GHCJS, tous deux supportant les typeclasses. –

Questions connexes