如何检查haskell中的类型

时间:2017-12-12 19:15:30

标签: haskell

我不知道如何检查haskell中的变量类型,我的意思是,当我用getLine从控制台读取内容时,我希望它是一个整数但用户也可以输入一个字符串,然后我不希望我的程序崩溃。例如,如果有人输入一个字符串,我尝试将其转换为Int然后它将崩溃(异常)所以我想检查它是否可转换。我怎么做 ?感谢您的帮助:))

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

1 个答案:

答案 0 :(得分:7)

编辑:请注意,总是有一个来自getLine的字符串 - 这是它返回的类型。如果该字符串包含数字的ascii表示,那么很好并继续阅读。

如果你有一个字符串g,并说g :: Int,编译器就会这样“不,你错了,那是一个字符串”。您需要执行转换 - 解析字符串并计算Int。最容易获得的方法是Prelude中的readreadMaybe中的Text.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