我在使用Haskell中的ncurses库中的函数
我尝试了两个针对Haskell的ncurses绑定;
timeout
和getch
遇到了奇怪的问题。当我从GHCi或runhaskell中使用它们时,它们按预期工作--getch
会等待给定timeout
毫秒数后返回,即使没有输入。但是当我使用GHC编译相同的文件时,getch
会立即返回。我尝试了两个针对Haskell的ncurses绑定;
hscurses
:import UI.HSCurses.Curses
main = do
initCurses
timeout 1000
c <- getch
endWin
print c
以及 ncurses
:
import UI.NCurses
main = do
e <- runCurses $ do
win <- defaultWindow
getEvent win $ Just 1000
print e
两者的行为方式与之前描述的相同奇怪。
我还尝试了C语言中等效的程序:
#include <ncurses.h>
int main()
{
initscr();
wtimeout(stdscr,1000);
int c = getch();
endwin();
printf("%d\n", c);
return 0;
}
这个代码按照预期工作。
所以我的问题是:使用解释的和编译后的Haskell终端时有什么区别?runhaskell和ghci是否修改了一些微妙的终端设置?或者编译后的代码以不同的方式加载库?
添加:
我尝试使用FFI从编译后的Haskell中调用C程序,但它立即返回(这是不正确的)。我认为这意味着问题不在于库,而在于GHC运行时的某个地方。