我正在尝试设置一个授权方案,我检查1.用户登录2.用户可以访问某个对象.为此,我首先调用maybeAuthId
,然后尝试获取当前对象,并"加入"另一个列出权限的表.有两个级别的可能案例和一个级别的空列表案例.我想过使用MaybeT,但要么我太累了要让它工作,要么"不是真正的monad变换器"-handler-transformers不能和MaybeT一起使用.有没有一种很好的方式来处理深深的maybes?
编辑:
看起来我有点不清楚.我的意思是我有这样的事情:
case foo of
Nothing -> something
Just foo' -> do
bar <- somethingelse
case bar of
Nothing -> ...
Just bar' -> ...
Run Code Online (Sandbox Code Playgroud)
你可以完全使用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)
Run Code Online (Sandbox Code Playgroud)
正如您所说,大多数功能都没有针对Yesod中的通用错误处理进行优化.但是,如果你有某种形式的东西Monad m => m (Maybe a)
,你可以简单地用MaybeT
它来把它翻到里面Monad m => Maybe (m a)
.
归档时间: |
|
查看次数: |
245 次 |
最近记录: |