9

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

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

我想把它换成返回 a Either e a。我怎样才能做到这一点?

4

2 回答 2

14

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

但是,对于这个特定示例,您应该reads改用。

于 2012-06-07T07:01:51.043 回答
2

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

 maybeRead :: Read a => String -> Maybe a
 maybeRead s = case reads s of
      [(x, "")] -> Just x
      _         -> Nothing
于 2012-06-07T12:12:01.913 回答