gpt4 book ai didi

haskell - 简化 Maybe 表达式

转载 作者:行者123 更新时间:2023-12-02 06:43:36 25 4
gpt4 key购买 nike

我有以下代码,我认为它很难看:

loginCheck = do
ml <- getPostParam "login" -- ml and mp :: Maybe ByteString
mp <- getPostParam "password"
if isJust ml && isJust mp
then authAs (fromJust ml) (fromJust mp)
else render "Msg" [("text", "Form incomplete")]

这段代码看起来非常有必要。我可以以某种方式简化它吗?

最佳答案

怎么样:

loginCheck = do
ml <- getPostParam "login" -- ml and mp :: Maybe ByteString
mp <- getPostParam "password"
case (ml,mp) of
(Just l, Just p) -> authAs l p
_ -> render "Msg" [("text", "Form incomplete")]

使用 isJust 和/或 fromJust 的代码几乎总是不好的风格,并且如果你在 fromJust 之前进行 isJust 检查错误的话,会有点危险。

这可以通过以下方式改进

  • 模式匹配,如上。但如果这是嵌套的,它就会变得很难看。
  • 组合符,例如 fromMaybe 可以更简洁。
  • 使用 Maybe(和 MaybeT)作为 Applicative 或 Monad 可以避免丑陋的嵌套。

关于haskell - 简化 Maybe 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11109226/

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