我在前奏返回 String
s中知道的唯一"用户输入"功能 - 但是(我会更频繁地说)我们想读取数字或其他类型。
读取任意类型的值的:: IO a
类型或类似的函数?我已经搜索了Hoogle的此类功能,但是要么由于它没有存在,要么是由于类似类型的其他功能大量的功能,所以我没有找到任何东西。
似乎有用且简单,必须有一个内置。我来的最接近的是:
-- Eg.
get :: Read a => IO a
get = (liftM read) getLine
main = do
x <- get
print $ x + 5
有 readLn
:
readLn :: Read a => IO a
值得注意的是,readLn
调用readIO
以提高IO
例外而不是未定义。
Prelude> x <- (fmap read getLine) :: IO Integer
asdf
Prelude> x
*** Exception: Prelude.read: no parse
Prelude> x <- (readIO =<< getLine) :: IO Integer
asdf
*** Exception: user error (Prelude.readIO: no parse)