Graphics 简单Haskell图形库?

Graphics 简单Haskell图形库?,graphics,haskell,Graphics,Haskell,我想尝试一下Haskell,我希望写一个小的2D街机游戏(俄罗斯方块或突破)。 你能推荐一个简单的图形库来帮助我快速入门吗 顺便说一句,我一直在试验SDL和wxWidgets,但由于依赖性问题,还没有成功运行任何示例,正在进行这方面的工作。是用C编写的,但有haskell绑定,也许尝试一下这可能是个好主意。我只使用过它的python绑定,但它们似乎工作得很好 您是否仔细阅读了以下列表: : 这里似乎有相当多的OpenGL、SDL和其他图形库接口 : 这里也有一些wxWidget库。这不是一个“简

我想尝试一下Haskell,我希望写一个小的2D街机游戏(俄罗斯方块或突破)。 你能推荐一个简单的图形库来帮助我快速入门吗


顺便说一句,我一直在试验SDL和wxWidgets,但由于依赖性问题,还没有成功运行任何示例,正在进行这方面的工作。

是用C编写的,但有haskell绑定,也许尝试一下这可能是个好主意。我只使用过它的python绑定,但它们似乎工作得很好

您是否仔细阅读了以下列表:

: 这里似乎有相当多的OpenGL、SDL和其他图形库接口

: 这里也有一些wxWidget库。

这不是一个“简单”的库,但是网上有很多关于OpenGL和GLUT的信息,还有一些非常好的教程和大量示例代码

您遇到的最大问题是Haskell中的OpenGL和GLUT绑定不包括它们绑定到的库。(wxWidgets也是如此。)许多Linux发行版都附带了OpenGL二进制文件,但没有Windows。这本该解决的,但对我来说似乎没有

因此,假设您正在Windows上安装,我建议您尝试以下方法:

  • 严格按照指示去做。它们很复杂——包括安装MinGW、MSys和手工编译SourceForge的GLUT项目,但这是我让OpenGL工作的唯一方法。我现在已经成功地安装在三台不同的机器上,包括XP和Vista,所以我可以放心地说,这些都是非常好的方向
  • 一旦成功,请查看这些教程。他们真的让我大开眼界,Haskell在图形方面有多么强大。您会发现所涉及的代码比您预期的要简单得多
  • 请查看网页上的示例游戏。它们是非常具有实验性的——这很好,因为这意味着要比在生产系统中找到的代码要少——但它们也非常复杂。(是的,俄罗斯方块已经有不止一个实现了,但不要因此而停止。)
  • 另一个很好的示例代码源是Haskell的GLUT绑定本身。查找examples目录,您将从OpenGL红皮书中找到许多示例代码端口
  • OpenGL是非常有状态的,因此如果您还没有完全了解Monads,您可能会发现Haskell代码有点令人生畏。我正在用我的OpenGL实验作为动力,最终让我的思想围绕这个概念


    祝你好运

    OpenGL状态都在IO monad中,因此实践可能有助于处理monad的基础知识,但在尝试推广到其他monad时却无济于事,因为其他monad所做的事情远比跟踪世界状态有用得多;OpenGL/GLUT似乎是OP的一个良好开端,尽管它不是哈斯凯尔式的。就我个人而言,我使用Gtk2Hs和它的GtkGlArea绑定,因为它比原始的GLUT更好,但一旦你开始使用OpenGL本身,什么处理窗口就无关紧要了。我没有玩过GTK。我首先让wxWidgets工作,所以我用它做了UI实验。但我会根据你的建议现在就试一下。我同意你对单子的看法——IO单子是一只相当迟钝的野兽,但它是一个开始。我的最终目标是努力实现arrows,这样我就可以尝试使用Yampa进行一些反应式编程。现在所有的概念都在我的脑海中飞过,但我开始把它们组合起来。OpenGL配置中的配置步骤给了我一个错误“无法为cygwin的堆保留空间”,显然这可能是由防病毒软件引起的。在我的电脑上禁用Avast似乎无助于解决问题。耐心和毅力在这个小项目中得到了很好的训练…要想在新版本中轻松安装,请检查您要做的第一件事是下载Cabal安装,这一点非常重要。没有它,依赖关系管理是可怕的。阴谋集团是伟大的-你一定要下载它。但这并不能解决缺少底层本机库的问题。很多库(例如wxWidgets、OpenGL,可能是GTK)根本不包含在Cabal包中。我只是看了Haskell的GTK2H,它确实包含了完整的GTK堆栈(这很好)。不幸的是,它没有一个Cabal包(不是很好),它的安装程序需要GHC6.10.3。不是“6.10.3或更高”——只是“6.10.3”。很容易解决,但仍然…:PA更好的回答:@Don Stewart:同意——另一个答案要好得多,它取代了这里所说的一切。