如何从 STDIN 读取 1 个字节?

How do I read 1 byte from STDIN?

如何从 STDIN 读取一个字节?

我试过了searching for IO Word8 on Hoogle但是没有任何用处。

我能找到的最接近的是 System.IO.getChar,但它显示的是 Char 而不是 Word8

我认为最简单的选择是像这样使用 Data.ByteString 中的 hGet

import qualified Data.ByteString as B
import System.IO (stdin)
import Data.Word (Word8)

getByte :: IO Word8
getByte = B.head <$> B.hGet stdin 1

您也可以像这样使用 hSetBinaryMode

import System.IO
import Data.Word (Word8)

getByte :: IO Word8
getByte = do
  hSetBinaryMode stdin True
  c <- getChar
  hSetBinaryMode stdin False
  pure $! fromIntegral (fromEnum c)