Dan*_*ema 2 parsing haskell record switch-statement
我想知道如何检查 Haskell 中读取函数的成功或失败(导致 Prelude.read: no parse)。就我而言,我在格式化记录结构的代码中运行“(read formatted :: Int)”,其中字段可能是字符串形式的单个 Int,但也可能包含其他内容。我只想将我的函数应用于读取返回 Int 的字段。谢谢。
您应该考虑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 视为函子并使用应用函子来处理它们。