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 当作一个函子,使用应用函子来处理它们。
我想知道如何检查 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 当作一个函子,使用应用函子来处理它们。