如果存在解析錯誤,則在Haskell read
中引發異常。
但是有readMaybe
這將返回一個Maybe值。
import Text.Read
main = do
number <- getLine
let res = case (readMaybe number :: Maybe Int) of
Just x -> "True"
Nothing -> "False"
putStrLn res
注意因爲readMaybe
使用let
代替一元bind操作符<-
是純函數。
你甚至可能能夠避免類型提示,如果你的方式,讓編譯器推斷出它的類型使用解析 值,例如:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
-- any list will do
main = do
number <- getLine
case readMaybe number of
Nothing -> putStrLn "bad number"
Just n -> print (fibs !! n)
這裏不再類型的註釋,因爲!!
採取Int
論點, 等等n
必須有類型Int
這意味着readMaybe number
必須有類型Maybe Int
。
更新
風格上我會建議你使用let
這裏 - 使用 綁定是完全不必要的,因爲你是計算一個純粹的價值。
但是,您可以通過使用return
與綁定運營商這樣寫:
main = do
number <- getLine
res <- return $ case (readMaybe number :: Maybe Int) of
Just _ -> "True"
Nothing -> "False"
putStrLn res
「做」是*單子語法糖*。 「真正的」底層版本是'main = getLine >> = \ number - > case ...'。但你應該首先了解* Functors *和* Applicative *。這些是搜索條件,讓你開始。預告片:'main =(可能是「False」useTheValue。readMaybe)<$> getLine' – MarLinn
謝謝,絕對是在路線圖上。 – raam86