簡體   English   中英

如何檢查haskell中的類型

[英]How to check type in haskell

我不知道怎么檢查haskell中的變量類型,我的意思是,當我用getLine從控制台讀取內容時,但我希望它是一個整數但用戶也可以輸入一個字符串,然后我不想要我程序崩潰。 例如,如果有人輸入一個字符串,我嘗試將其轉換為Int然后它將崩潰(異常)所以我想檢查它是否可轉換。 我怎么做 ? 謝謝你的幫助 :)

 main1 = do
        let g <- getLine
            k = g :: Int 
            if(k :: Int)
                then ........ 

編輯:請注意,你總是有一個來自getLine的字符串 - 這是它返回的類型。 如果該字符串包含數字的ascii表示,那么很好並繼續閱讀。

如果你有一個字符串g ,並且說g :: Int那么編譯器就會這樣“不,你錯了,那是一個字符串”。 您需要執行轉換 - 解析字符串並計算Int。 最容易獲得的方法在Prelude中readreadMaybeText.ReadText.Read

Read會起作用但會拋出無效輸入的異常:

Prelude> read "4742" :: Int
4742
Prelude> read "no" :: Int
*** Exception: Prelude.read: no parse
Prelude> read "191andmore"
*** Exception: Prelude.read: no parse

也許變體是異常安全的:

Prelude> import Text.Read
Prelude Text.Read> readMaybe "181" :: Maybe Int
Just 181
Prelude Text.Read> readMaybe "no" :: Maybe Int
Nothing
Prelude Text.Read> readMaybe "211andmore" :: Maybe Int
Nothing

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM