如何在这个Haskell代码中打印到终端?

时间:2016-10-08 14:46:58

标签: haskell

我正在尝试使用Haskell中的Gloss运行模拟。

我尝试编写一个简单的脚本,我想要打印“Clicked!”每次我点击Gloss画布上的任何地方到终端。我传递给Gloss'播放功能的世界是一个IO动作,所以我可以启用打印到终端以响应事件。

然而,没有任何东西打印到终端! : - (

let newURL = oldURL.stringByReplacingOccurrencesOfString(".jpg", withString: "-40x40.jpg", options: NSStringCompareOptions.LiteralSearch, range: nil)

现在我明白了,Haskell可能正在做的只是评估 IO动作而不是执行它,而这与Haskell的懒惰有关。

那么在这种情况下如何强制打印到终端?

1 个答案:

答案 0 :(得分:3)

您使用的是纯play版本。如果要在事件处理程序中执行IO,则必须使用Graphics.Gloss.Interface.IO.Game.playIO。有了它,事件处理程序具有类型

Event -> world -> IO world

其中包含纯world,并返回将要执行的IO操作。

请注意,这也需要您的绘图和步骤函数同时返回IO个动作((return . const Blank)(return . const id))。此外,您必须不再return将您的初始世界IO。{/ p>