Tas*_*Guy 9 io haskell interactive
我对Haskell很新,所以我正在寻找一种简单的方法来检测按键,而不是使用getLine.
如果有人知道任何库,或者这样做的一些技巧,那就太好了!
如果有更好的地方可以问这个问题,请指导我,我很感激.
Oll*_*ers 15
如果您不想阻止,可以使用hReady检测是否已按下某个键.这对于您希望程序运行的游戏非常有用,并且无论何时发生,都可以在不暂停游戏的情况下选择按键.
这是我用于此的便利功能:
ifReadyDo :: Handle -> IO a -> IO (Maybe a)
ifReadyDo hnd x = hReady hnd >>= f
where f True = x >>= return . Just
f _ = return Nothing
Run Code Online (Sandbox Code Playgroud)
哪个可以这样使用:
stdin `ifReadyDo` getChar
Run Code Online (Sandbox Code Playgroud)
返回一个Maybe,Just如果按下了一个键,Nothing否则.
import System.IO
main :: IO ()
main = do
hSetBuffering stdin NoBuffering
x <- getChar
putStrLn ("You pressed: " ++ [x])
Run Code Online (Sandbox Code Playgroud)
我不知道什么时候可以保证工作.将终端置于"原始"模式是一个依赖于系统的过程.但它适用于Linux上的GHC 6.12.1.