gpt4 book ai didi

haskell - IO 和 Maybe monad 交互

转载 作者:行者123 更新时间:2023-12-03 14:30:38 24 4
gpt4 key购买 nike

我有以下代码,但我觉得它太丑陋和必要了。有人会改写它以使其更实用吗? (我搞砸了 MaybeT 但无法使其工作)也欢迎应用性答案。

getString :: IO String

pred :: String -> Bool

f :: String -> String

result :: IO (Maybe String)
result = do
s <- getString
if pred s
then return $ Just $ f s
else return Nothing

编辑:一个后续问题:如果 pred 和 f 也在 IO 中返回结果怎么办(我应该把它分成一个单独的问题吗?)
getString :: IO String

pred :: String -> IO Bool

f :: String -> IO String

result :: IO (Maybe String)
result = do
s <- getString
b <- pred s
if b
then Just <$> f s
else return Nothing

最佳答案

我将从 IO 中的逻辑开始。单子(monad)。然后你的函数可以写成

result :: IO (Maybe String)
result = foo <$> getString

foo :: String -> Maybe String
foo s | pred s = Just (f s)
| otherwise = Nothing

你可以写 foo以不同的方式使用一些花哨的组合器,但我认为这里没有必要。最重要的是让你的逻辑脱离 IO以便更容易测试。

关于haskell - IO 和 Maybe monad 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7691374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com