haskell - 什么样的库组合可以提供 2D 图形(可选)在 Web 应用程序中? ( haskell )

标签 haskell yesod gloss

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

基本要求:

  • 简单的二维几何绘图,由Gloss提供的那种或Diagrams
  • SVG 风格的交互性:例如,玩拼图游戏或十五游戏,能够单击一个对象,并可能将其拖动到 Canvas 上。
    • (后备:使用键盘导航在图像中移动、激活对象等)

引发的要求:

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

如果是网络应用程序,它可以是“图像映射”样式,其中每次交互都涉及到服务器的往返,或者 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 样式?

有什么建议吗?

最佳答案

我将就此事分享我的看法。

由于 Fay 编译为 Javascript,而 Elm 编译为 Javascript、Html 和 Css,我认为您应该尝试一下 Elm。它仍然有点新,但我认为它很适合您的需求。您可以使用 websockets 设置 Snap 网络服务器(如果您想将其发送到服务器)。这样您就可以建立 1 个连接,而不是连续发送 ajax 请求。

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

我认为 Elm 不会出错,但我建议您仔细考虑一下您的选择。希望您的项目一切顺利!

关于haskell - 什么样的库组合可以提供 2D 图形(可选)在 Web 应用程序中? ( haskell ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861627/

相关文章:

haskell - 使用 haskell 投影 euler 25 的缓慢解决方案

haskell - 证明foldr f st (xs++ys) = f (foldr f st xs) (foldr f st ys)

haskell - 在 Yesod 和 Keter 中传递应用程序 secret

haskell - 在 Windows 7 上使用 cygwin 安装 Cabal-dev

opengl - 在 Ubuntu 上安装光泽(特别是 OpenGLRaw 依赖项)时出现 "* Missing C library: GL"

Haskell Gloss,在动画功能中从控制台读取不会更新绘图

haskell - 生成三元组中所有可能的数字组合?

Haskell: “where” 子句具有多个顶级绑定(bind)?

html - 如何独立于外部请求只渲染一次 Widget?

haskell - 将 Sprite 包含到二进制文件中——Gloss 库