Haskell读取命令行Int参数出现Prelude.read no parse错误的原因
错误产生原因
- 核心问题出在参数读取行
args <- fmap (read . head) getArgs的逻辑错误:getArgs返回的是所有命令行参数组成的字符串列表,执行./test 100 200时对应值为["100", "200"]- 你先调用
head取了列表的第一个元素"100",再调用read尝试解析该字符串 - 后续
case args of分支要求args是包含2~3个元素的数值列表,编译器会推导read需要把"100"解析为列表类型,但普通数字字符串不符合Haskell列表的字符串表示格式(列表的合法字符串表示需要带方括号,例如"[100,200]"),因此read解析失败抛出对应错误。
修复方案
你需要对整个参数列表的每个元素做类型转换,而非只取第一个元素解析,修正后的代码如下:
-- test.hs main :: IO () main = do args <- getArgs case map read args of [x,y,a] -> doGeneration x y a [x,y] -> doGeneration x y 10 _ -> usage
内容的提问来源于stack exchange,提问作者emesik
相关产品推荐
相关产品推荐

