gpt4 book ai didi

haskell - 深可能与 yesod 叠加

转载 作者:行者123 更新时间:2023-12-04 14:16:06 26 4
gpt4 key购买 nike

我正在尝试设置一个授权方案,我在其中检查 1. 用户已登录 2. 用户有权访问某个对象。为此,我首先调用 maybeAuthId ,然后尝试获取当前对象,并“加入”到另一个列出权限的表。有两个级别的可能案例和一个级别的空列表案例。我曾想过使用 MaybeT,但要么我太累了无法让它工作,要么“不是真正的 monad 转换器”-handler-transformers 不能与 MaybeT 一起使用。有没有很好的方法来处理深度可能?

编辑:

我似乎有点不清楚。我的意思是我有这样的东西:

case foo of
Nothing -> something
Just foo' -> do
bar <- somethingelse
case bar of
Nothing -> ...
Just bar' -> ...

最佳答案

您完全可以使用MaybeT对于Yesod。这样做:

runMaybeT $ do
uid <- MaybeT maybeAuthID
car <- MaybeT . runDB . getBy $ UniqueCarOwner uid
location <- MaybeT . liftIO . ciaLocateLicensePlate . licensePlate $ car
country <- MaybeT . findCountry $ location
return (car, country)

正如您所说,大多数函数都没有针对 Yesod 中的通用错误处理进行优化。但是,如果您有 Monad m => m (Maybe a) 形式的内容,您可以简单地使用 MaybeT把它翻过来变成 Monad m => Maybe (m a) .

关于haskell - 深可能与 yesod 叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12130732/

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