Haskell代码运行抛出Prelude.read: no parse异常如何解决?
错误原因
核心问题出在cmd = read (head ord) :: Char这行代码的read函数使用逻辑错误:
Haskell的read函数解析Char类型时,要求输入字符串必须是符合Haskell字符字面量规则的格式,也就是必须用单引号包裹字符,比如只有输入"'1'"才能被read正确解析为字符'1'。你运行时输入的是1,经过words input处理后得到的是字符串"1",直接将该字符串传给read解析为Char类型完全不符合格式要求,因此触发Prelude.read: no parse异常。
修复方法
直接取字符串的首字符即可,不需要调用read解析,将对应行修改为:
cmd = head (head ord) :: Char
如果要兼容用户输入空行的异常场景,还可以补充对ord是否为空的判断,避免调用head时报错。
内容的提问来源于stack exchange,提问作者Mampenda
相关产品推荐
相关产品推荐

