在 Scotty do 块中添加打印

Add print in Scotty do block

我是 Haskell 的新手,如果问题很愚蠢,请提前致歉,但我无法在 google 中找到解决方案。

假设我有这个程序使用 Scotty 网络框架:

responseUserByName :: ActionM ()
responseUserByName = do name <- param "name"
                        user <- liftAndCatchIO $ getUserByUserName name
                        json user

我想添加一个日志,因为它在运行时失败了,我不知道为什么。所以我的想法是在 do 块中添加一些打印来检查值。

但是由于 do 块必须 return 一个 ActionM 我无法打印并且 return 一个 IO。好吧,至少我不知道怎么做。

此致

我猜 ActionM 来自 Scotty。在这种情况下,您可以简单地使用 liftIO 提升 IO 操作,就像您已经使用 liftAndCatchIO:

一样
responseUserByName :: ActionM ()
responseUserByName =
    do name <- param "name"
       user <- liftAndCatchIO $ getUserByUserName name
       liftIO $ putStrLn "this is a log message"
       json user