【发布时间】:2021-06-06 17:34:39
【问题描述】:
Haskell 有 a bug in Windows,看起来像 fixed with WinIO in GHC9:getChar 忽略 NoBuffering 模式 - 在按下 Enter 之前它不会计算。
某人suggested 通过外来电话解决方法:
{-# LANGUAGE ForeignFunctionInterface #-}
import Data.Char
import Foreign.C.Types
getHiddenChar = fmap (chr.fromEnum) c_getch
foreign import ccall unsafe "conio.h getch"
c_getch :: IO CInt
它有点工作,但问题是它似乎阻止输出到控制台,直到按下某个键,我同时读取按键并从不同线程写入控制台。
您能否帮助找到一种方法(例如,编写一个外部函数调用 - 不幸的是,我对此了解不多)在 GHC 中从控制台读取字符/键,无需缓冲和回显,也不会阻塞到控制台的输出8.8.x(或至少 8.10.x),在 Windows 上?
谢谢!
(理想情况下我需要一种跨平台的方式,但是我可以通过条件编译来实现,所以如果它只适用于Windows就可以了。上面的外部调用已经不是跨平台的了)。
【问题讨论】: