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 上工作就可以了。上面的外国调用还不是跨平台的)。
最佳答案
我找到了执行此操作的库:https://hackage.haskell.org/package/terminal
它不会在等待按键时阻塞,您仍然可以从另一个线程打印。
它还解决了 Windows 终端 utf8 problem .
关于windows - 具有 NoBuffering 的 Haskell 跨平台 getChar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66536563/