在我的 Haskell 程序中,我想使用以下命令读取用户给出的值getLine
功能。然后我想使用read
函数将此值从字符串转换为适当的 Haskell 类型。我怎样才能捕捉到抛出的解析错误read
函数并要求用户重新输入值?
我是否正确地认为这不是“IO 错误”,因为它不是由 IO 系统无法正常运行引起的错误?这是一个语义错误,所以我不能使用IO错误处理机制?
你不想。你想使用reads http://hackage.haskell.org/packages/archive/base/4.0.0.0/doc/html/Text-Read.html#v%3Areads相反,可能是这样的:
maybeRead = fmap fst . listToMaybe . reads
(尽管如果元组的第二个元素不是,您可能想出错""
,也就是说,如果还有剩余的字符串)
The reason为什么你想使用读取而不是捕获error
异常是纯代码中的异常是邪恶的,因为它是very很容易在错误的地方尝试捕捉它们:请注意,它们只有在被迫时才飞行,而不是之前。找到它的位置可能是一项不简单的工作。这就是(原因之一)Haskell 程序员喜欢保持代码完整,即终止且无异常。
您可能想看看合适的解析框架(例如parsec http://www.haskell.org/haskellwiki/Parsec) and 哈斯凯莱恩 http://hackage.haskell.org/package/haskeline, too.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)