使用`error`捕获抛出的错误?

9

有一些stdlib函数会在无效输入时抛出错误。例如:

Prelude> read "1o2" :: Int
*** Exception: Prelude.read: no parse

我希望将其封装并返回 Either e a。我该怎么做?
2个回答

14

没有勺子。你没有从我这里听到这句话。

对于这个特定的例子,你应该使用reads


我喜欢你的措辞方式。:) 谢谢你的回答! - missingfaktor

2

我更喜欢将错误转化为值:

 maybeRead :: Read a => String -> Maybe a
 maybeRead s = case reads s of
      [(x, "")] -> Just x
      _         -> Nothing

我也更喜欢这样做,但问题是要“普遍”地做到。read只是一个例子。 - missingfaktor
我认为通常情况下,对于任何会抛出错误的函数,都会有一个“安全”的版本。 - Tyler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接