考虑以下问题。
我正在为一些字符串函数编写包装器;其中一个是来自chr
的{{1}}(例如)。现在,如果我的API的输入是一个错误的输入,我想抛出一个错误,否则,我只想返回整数输出。我想保持算法简单 -
Data.Char
这显然不是任何Haskell代码,而是对我希望算法看起来像什么的描述。我已经看到了getChr someInput = do
x <- chr someInput -- this doesn't evaluate unless we evaluate ourselves
-- handle exception here
result = <_some_evaluation_>
case result of
Left _ -> custom error throw
Right _ -> return something
示例,但我不确定的返回try (evaluate _)
类型值可以用简单的case语句来处理。我想要一些非常简单的东西,所以我可以根据自己的需要加以说明。有办法吗?
答案 0 :(得分:1)
try
适用于此。
getChr someInput = do
x <- chr someInput
result = try (some_evaluation x)
case result of
Left (SomeException _) -> print "Oh no!"
Right val -> print val
答案 1 :(得分:0)
我猜你的问题可能是你想要只抓住一些特定的例外,对吧?然后你需要确保将异常转换到某个地方,以便它的类型比SomeException
更特殊。例如:
do
result <- try something
case result of
Left e -> print (e :: IOException)
Right x -> return x
或者,如果您要放弃该例外,请将其投放到const
:
do
result <- try something
case result of
Left e -> const (print "whatever") (e :: IOException)
Right x -> return x