Haskell 中 read 函数的大小写匹配

Dan*_*ema 2 parsing haskell record switch-statement

我想知道如何检查 Haskell 中读取函数的成功或失败(导致 Prelude.read: no parse)。就我而言,我在格式化记录结构的代码中运行“(read formatted :: Int)”,其中字段可能是字符串形式的单个 Int,但也可能包含其他内容。我只想将我的函数应用于读取返回 Int 的字段。谢谢。

Fra*_*ing 5

您应该考虑readMaybeText.Read。一旦值在Maybemonad 内返回,您就可以用来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"
Run Code Online (Sandbox Code Playgroud)

如果你想更冒险一点,既然数据在 Maybe monad 中,我们可以将 Maybe 视为函子并使用应用函子来处理它们。