Haskell 如何使用Scotty';s action t monad是否像Maybe monad一样,针对错误返回早期http响应?
我希望能够向用户返回自定义错误页面和状态,并在发生此类错误时在monad中结束计算。我的理解是,这有点像Haskell 如何使用Scotty';s action t monad是否像Maybe monad一样,针对错误返回早期http响应?,haskell,scotty,Haskell,Scotty,我希望能够向用户返回自定义错误页面和状态,并在发生此类错误时在monad中结束计算。我的理解是,这有点像Maybemonad,当遇到第一个Nothing时,计算结束,但会发出最后的错误消息(通过HTTP发送给用户) 我有一个代码段如下所示: liftIO $ scotty (config & port & fromEnum) $ get "/cow/:mark" $ do qParams :: DM.Map LTxt.Text LTxt.Text <
Maybe
monad,当遇到第一个Nothing
时,计算结束,但会发出最后的错误消息(通过HTTP发送给用户)
我有一个代码段如下所示:
liftIO $ scotty (config & port & fromEnum) $
get "/cow/:mark" $ do
qParams :: DM.Map LTxt.Text LTxt.Text <- DM.fromList <$> params
markTxt <- param "mark"
let intervalTxtMay = DM.lookup "interval" qParams
let cowMarkMaybe = TR.readMaybe $ Txt.unpack markTxt
cowMark <- case cowMarkMaybe of
Nothing -> do
status status404
textLazy $ "Couldn't parse cow mark " ++ markTxt ++ " as integer."
finish
Just cmVal-> pure $ CowMark cmVal
liftIO $ logLogIt Debug lgr ["***** Made it past cowMark ******"]
...
liftIO$scotty(配置、端口和fromnum)$
获取“/cow/:标记“$do”
qParams::DM.Map LTxt.Text LTxt.Text这两个问题都源于从未输入的Nothing
案例,因为TR.readMaybe
始终成功。打印markTxt
和cowMarkMaybe
如果后者现在应该是Nothing
,我正在考虑将ActionT包装在Except中,使用一个可以转换为响应的自定义错误类型。我打赌它也不会打印“无法解析cow mark”。如果有,请尝试在。。。在一个不应该有值的情况下,看看会发生什么。@Gurkenglas如果你是正确的,它不会打印出来。是的,这对我来说是一个逻辑问题-我使用了一个解析正确的查询,但不在数据库中,不知怎的,在调试时,我在脑海中把它等同于两个,忘记了没有检查它是否在数据库中。