3

我正在使用 2D 图形构建一个简单的交互式程序,我想知道 Haskell 库的哪种组合可能会起作用。到目前为止,我的要求和想法如下:

基本要求:

  • 简单的二维几何绘图,由GlossDiagrams提供
  • SVG 风格的交互性:例如,玩拼图游戏或十五个游戏,能够单击一个对象,也可以在画布上拖动它。
    • (后备:使用键盘导航来移动图像,激活对象等)

诱导要求:

  • 我更喜欢在FP Haskell Center工作,这意味着我的 UI 应该是一个 Web 应用程序(使用 Yesod/Snap/Happstack)。

如果是 Web 应用程序,它可以是“图像地图”样式,其中每次交互都涉及到服务器的往返,或者是 Javascript 样式,如FayElm

非要求:

  • 这是一个独立的“玩具”(如七巧板或拼图游戏),因此它不需要数据库中的任何持久状态

我的想法:

任何人都可以建议一组可能适用于这个 UI 的包和架构风格吗?我目前的想法是:

  • Yesod 使用 {Gloss or Diagrams} 在 FP Haskell Center 中绘制静态图形。

    • 然后切换到本地开发,添加本地原生鼠标点击交互。
    • 或者使用一些 Ajax 解决方案将点击事件发送回服务器以更新图形
  • 带有反应图形的 Elm,没有 FP Haskell Center

  • 交互式 Javascript 体验,用 Fay 编写,编译为 Javascript。(我没用过Fay,不知道能不能依赖很多Hackage包,我知道它不支持一些扩展,但不知道能不能使用依赖那些扩展的预编译包)

  • Elm 和 Fay 看起来很相似,主要区别在于:

    • (a) Elm 实际上并不是 Haskell
    • (b) Fay 不强制执行 FRP 样式?

有什么建议吗?

4

1 回答 1

2

我会分享我对这个问题的看法。

由于 Fay 编译为 Javascript,而 Elm 编译为 Javascript、Html 和 Css,我会说你应该给 Elm 一个机会。它仍然有点新,但我认为它会很好地满足您的需求。您可以使用websockets设置 Snap 网络服务器(如果您想将其发送到服务器)。通过这种方式,您可以建立 1 个连接,而不是连续发送 ajax 请求。

当然,这取决于你想离 Haskell 多近。Elm 并不懒惰,也没有 Monadic 计算(这意味着没有 do 语法)。相反,您可以像编写任何纯函数一样编写它。信号接近 IO Monad,但仍然不同。

我认为 Elm 不会出错,但我建议您查看您的选择。希望你的项目顺利!

于 2014-01-01T01:28:35.167 回答