我目前正在编写一个在线游戏,我使用Haskell作为服务器端后端,使用Elm作为前端/渲染。
现在我将我的GameState作为一个大的ADT,其类型非常简单,我也可以在Elm中使用它。我希望避免使用JSON,只需将Elm的输出传递给" show"在数据上,我可以将其解析回Elm中的ADT。
我想知道,有什么东西相当于哈斯克尔"阅读"哪个可以自动查看show输出的字符串,并将其解析回数据?如果没有,是否有任何现有的解析器库可用于Elm?
如果我最终使用JSON,有没有办法自动将其转换为ADT? (或许类似于Aeson的FromJSON?)
答案 0 :(得分:4)
我的理解是,Elm-没有类型类 - 不能轻易拥有read
或fromJSON
的多态版本。我也不相信它对通用编程有任何好的设施,所以实现类似于deriving
或OCaml的with
的东西也很困难。
不幸的是,这意味着您最好的选择是编写一次性函数来序列化和反序列化您使用的各种类型。您可以在Haskell端使用aeson,然后使用Elm's JSON library在JSON中编写函数。
另一种选择可能是尝试重用Haskell的deriving Read
生成的代码并将其移植到Elm。但是,这可能比它的价值更多,而且我不确定如何解决它。