他の人が示唆しているように、ここでも、文脈によってはApplicative
いいかもしれません。MaybeT
覚えておくべき 3 番目のことは、do
ブロック バインディングでパターン マッチの失敗が呼び出されることfail
です。
これは私がすることです:
loginCheck = do
ml <- getPostParam "login"
mp <- getPostParam "password"
fromMaybe (render "Msg" [("text", "Form incomplete")]) $
authAs <$> ml <*> mp
または、MaybeT
別の戻り値を持つものではありますが、 を使用したソリューション (ここでも、より多くのコンテキストがこれが良いアプローチであるかどうかを示す可能性があります):
getPostParamT = MaybeT . getPostParam
loginCheckT = do
ml <- getPostParamT "login" -- ml and mp :: Maybe ByteString
mp <- getPostParamT "password"
liftIO $ authAs ml mp
<|> (liftIO $ render "Msg" [("text", "Form incomplete")] )
...実際、上記は私がそれを見るとかなりばかげています