
Bulat Ziganshin wrote:
1. works for me in ghc:
getHiddenChar = liftM (chr.fromEnum) c_getch foreign import ccall unsafe "conio.h getch" c_getch :: IO CInt
Depending on your use case, that's an okay workaround. (And probably suitable for the OP as well.) But unfortunately conio doesn't mix well with ordinary IO. For one, it always reads from the console and not stdin, so redirecting stdin won't work. Another problem is illustrated in the following: main = do a <- getChar b <- getHiddenChar c <- getChar print a print b print c Type a, then press enter, then b. The result (including the echoed input): a 'a' 'b' '\n' I don't know where that '\n' came from but it certainly shouldn't be there. Yet another example: type abcd, then press enter, giving: abcd 'a' '\r' 'b' The fact that newlines are reported as '\r' and not '\n' is easy enough to deal with, but I wonder why getch chose to give '\r' and not 'b'?