Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何使用Scotty';s action t monad是否像Maybe monad一样,针对错误返回早期http响应?_Haskell_Scotty - Fatal编程技术网

Haskell 如何使用Scotty';s action t monad是否像Maybe monad一样,针对错误返回早期http响应?

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 <

我希望能够向用户返回自定义错误页面和状态,并在发生此类错误时在monad中结束计算。我的理解是,这有点像
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如果你是正确的,它不会打印出来。是的,这对我来说是一个逻辑问题-我使用了一个解析正确的查询,但不在数据库中,不知怎的,在调试时,我在脑海中把它等同于两个,忘记了没有检查它是否在数据库中。