【问题标题】:Does Elm have an equivalent of Haskell's "Read"Elm 是否有相当于 Haskell 的“阅读”
【发布时间】:2013-08-30 23:31:48
【问题描述】:

我目前正在编写一个在线游戏,我使用 Haskell 作为服务器端后端,使用 Elm 作为前端/渲染。

现在我将我的 GameState 作为一个大 ADT,其类型非常简单,我也可以在 Elm 中使用它。我希望避免使用 JSON,而只是将“show”的输出传递给 Elm,然后我可以将其解析回 Elm 中的 ADT。

我想知道,有没有什么相当于haskell的“读取”可以自动查看show输出的字符串,并将其解析回数据?如果没有,是否有任何现有的可用于 Elm 的解析器库?

如果我最终使用 JSON,有没有办法自动将其转换为 ADT? (可能类似于 Aeson 的 FromJSON?)

【问题讨论】:

    标签: parsing haskell input functional-programming elm


    【解决方案1】:

    我的理解是,没有类型类的 Elm 不能轻易拥有 readfromJSON多态 版本。我也不相信它有任何用于泛型编程的好工具,因此实现类似于 deriving 或 OCaml 的 with 的东西也会很困难。

    不幸的是,这意味着您最好的办法是编写一次性函数来序列化和反序列化您使用的各种类型。您可以在 Haskell 端使用 aeson,然后使用 Elm's JSON library 向/从 JSON 写入函数。

    另一种选择可能是尝试重用 Haskell 的 deriving Read 生成的代码并将其移植到 Elm。然而,这可能比它的价值更多,我不确定如何去做,确切地说。

    【讨论】:

    • 这也是为什么我决定等 elm 更加成熟后再认真使用它的原因。
    • @johanatan 你用什么做前端? JavaScript 也没有类型类。
    • @samboosalis:您可以使用 Haste 或 GHCJS 将 Haskell 编译为 JavaScript,两者都支持类型类。
    • 是的,我看了haskell.org/haskellwiki/The_JavaScript_Problem。显然我很想在浏览器中运行任意 Haskell。但是将 Haskell 编译成 JavaScript 效果如何?它可以编译 Parsec 吗?编译后的 JavaScript 有多大?编译后的 JavaScript 效率如何?出现什么错误?它可以与 HTML/CSS/JS 以及 Elm、ports 和 flow 等接口吗?是否有任何具有良好用户体验模型的 Haskell 库,例如 Elm 的 Signals?我是 Elm 的新手(大概一周),但我对制作(至少是基本的)网络应用程序如此容易感到震惊。
    • @samboosalis:不幸的是,我没有机会使用任何一个,但我的理解是它们都非常完整。我为 OCaml 使用了类似的编译器,并且与 JavaScript 交互从来都不是问题。如果您只是想要一种简单的方法来创建由 Haskell 支持的 Web 界面,您还可以查看 threepenny gui。它运行 Haskell 服务器而不是编译成 JavaScript,但它有一个很好的模型,非常适合快速 UI。
    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 2010-10-16
    • 2023-04-04
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多