【发布时间】:2016-05-01 23:33:24
【问题描述】:
我是一个初学者,我正在尝试编写一个函数来检查一个字符串是否可以解释为数字。这是我的代码:
string' xs = if (all isDigit xs == False)
then "can not be interpreted"
else read xs::Int
但它一直报告错误“无法将预期类型'[Char]'与实际类型'Int'匹配” 不知道为什么,有人遇到过这个问题吗?
【问题讨论】:
-
string'的类型是什么 - 是string' :: String -> String还是string' :: String -> Int?在 haskell 中,您不能有一个函数根据输入的运行时属性返回两种不同类型中的一种。 -
您可能还喜欢
reads :: String -> [(Int, String)],它将检查输入是否适合您,如果不是,则返回[](以及成功解析的列表以及如果成功则未解析的任何内容)。 -
样式注释:考虑使用
not (...)而不是(...) == False。这是一个口味问题,但第一个看起来更“自然”。或者,完全删除它并交换 then/else 分支。 (丹尼尔上面关于reads的建议会更好。)
标签: haskell