我试图从IO中获取一个数字:
numberString <- getLine
print 3 + read numberString
如果numberString
是一个很好的数字字符串(例如&#34; 3241&#34;),但是当它不是那么好的时候(例如&#34; 124gjh&#34; ),它引发了一个例外:
*** Exception: Prelude.read: no parse
有reads
函数返回[(a0, String)]
,当没有匹配时,这将是[]
。有一种简单的方法,我有这样的东西:
read' :: String -> Maybe a
所以,如果事情不起作用而不是突然停止,我只会得Nothing
答案 0 :(得分:4)
Text.Read
中的readMaybe
权限应该与您的要求完全相同:
Prelude> import Text.Read(readMaybe)
Prelude Text.Read> readMaybe "3241" :: Maybe Int
Just 3241
Prelude Text.Read> readMaybe "Hello" :: Maybe Int
Nothing