Haskell 中读取函数的大小写匹配

Case matching on read function in Haskell

我想知道如何检查 Haskell 中读取函数的成功或失败(导致 Prelude.read:没有解析)。在我的例子中,我 运行 "(read formatted :: Int)" 在格式化记录结构的代码中,其中字段可能是字符串形式的单个 Int,但也可能包含其他内容。我只想将我的函数应用于读取 returns 一个 Int 的字段。谢谢

您应该从 Text.Read 考虑 readMaybe。在 Maybe monad 中返回值后,您可以使用 case 来决定要做什么。

import Text.Read

add1 :: String -> Maybe Int
add1 str = case intval of  
   Just x -> Just (x + 1)
   Nothing -> Nothing

   where
      intval = readMaybe str


main = do
   print $ add1 "7"
   print $ add1 "7.0"

如果你想更大胆一点,既然数据在 Maybe monad 中,我们可以把 Maybe 当作一个函子,使用应用函子来处理它们。