我正在尝试使用Haskell中的Gloss运行模拟。
我尝试编写一个简单的脚本,我想要打印“Clicked!”每次我点击Gloss画布上的任何地方到终端。我传递给Gloss'播放功能的世界是一个IO动作,所以我可以启用打印到终端以响应事件。
然而,没有任何东西打印到终端! : - (
let newURL = oldURL.stringByReplacingOccurrencesOfString(".jpg", withString: "-40x40.jpg", options: NSStringCompareOptions.LiteralSearch, range: nil)
现在我明白了,Haskell可能正在做的只是评估 IO动作而不是执行它,而这与Haskell的懒惰有关。
那么在这种情况下如何强制打印到终端?
答案 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>