Haskell 中 read 函数的大小写匹配

发布于 2025-01-18 05:02:45 字数 143 浏览 0 评论 0原文

我想知道如何检查Haskell中的读取功能的成功或失败(以PRELUDE.NO READ。在我的情况下,我运行”(读取格式化:: int)”,以代码格式化记录结构,其中字段可能是字符串形式的单个int,但也可能包含其他内容。我只想将功能仅应用于读取返回int的字段。谢谢。

I am wondering how to check success or failure (resulting in Prelude.read: no parse) of the read function in Haskell. In my case i run "(read formatted :: Int)" in code formatting a record structure, where the fields might be a single Int in String form but might also contain something else. I want to apply my function only to the fields where the read returns an Int. Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猥琐帝 2025-01-25 05:02:45

您应该考虑 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 视为函子并使用应用函子来处理它们。

You should consider readMaybe from Text.Read. Once the value is returned within the Maybe monad then you can use case to decide what to do.

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"

If you want to be more adventurous, now that the data is in the Maybe monad, we can treat the Maybe as a functor and use applicative functors to process them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文