Haskell读取函数报告错误与预期类型不匹配

时间:2016-01-25 15:32:25

标签: haskell

我是初学者,我正在尝试编写一个函数来检查字符串是否可以解释为数字。这是我的代码:

string' xs = if (all isDigit xs == False)
             then "can not be interpreted"
             else read xs::Int 

但它一直报告错误“无法匹配预期类型'[Char]'与实际类型'Int'” 我不知道为什么,有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:4)

你的if-then-else的两个分支都需要具有相同的类型。你的"然后" branch的类型为[Char],而你的" else" branch的类型为Int。看起来像你的"然后"分支应该导致某种错误。在这种情况下,您可以使用error,它具有多态类型,可以替代使用。

更好的解决方案(在评论部分中建议)将使用Either类型,该类型可以返回两个选项之一(LeftRight)。

string' xs = if (all isDigit xs == False)
             then Left "can not be interpreted"
             else Right (read xs::Int)

另一个常见的事情是使用Maybe类型

string' xs = if (all isDigit xs == False)
             then Nothing
             else Just (read xs::Int)