【发布时间】:2012-09-20 00:41:18
【问题描述】:
我目前正在学习《The Haskell School of Expression》这本书中的练习,并且已经到了关于创建图形的第三章。本书使用SOEGraphics模块并演示了在窗口中绘制一些简单的文本,然后按下按钮将其关闭。
但是,在编译和执行后,我发现虽然窗口出现了屏幕上的文本,但无论我按下哪个键,或者焦点是在命令行还是窗口本身,窗口都拒绝关闭。
这是本书的源代码:
module Main where
import SOE
main = runGraphics(
do w <- openWindow
"My First Graphics Program" (300, 300)
drawInWindow w (text(100,200) "HelloGraphicsWorld")
k <- getKey w
closeWindow w
)
关闭窗口的唯一方法是使用 CTRL-C 强制它退出。我的代码有什么被我忽略的吗?该程序使用 GHC 7.4.1 编译并在 Ubuntu 上运行。
【问题讨论】:
-
你从哪里得到的模块?据我所知,hackage 上的 HGL 包不是用 GHC >= 7 构建的。
-
也许我对我指的是哪些库感到困惑?我按照说明让 SOEGraphics 工作here
-
好的,这是一个相当新的来源,所以它应该工作。我不知道 SOE 代码已再次从 HGL 中移出,而您与 hugs 文档的链接(最后一次发布的 hugs 是 2006 年 9 月!)让我感到奇怪。不过,我不知道是什么原因导致挂起。是否可以缓冲,以便仅在按下
<enter>后发送按键? (不太可能,但我能提供的唯一猜测。) -
我发现了同样的问题,在查看文件 SOE.hs 后,我发现了一个问题:在第 488 和 489 行,“return ch”和“getKeyEx win False”这两个表达式应该被交换。确实,在更改之后,程序可以正常工作。希望这可能有任何价值。