在Scotty Do Block中添加打印

时间:2018-08-15 19:47:51

标签: haskell scotty

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

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

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

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

但是由于do块必须返回ActionM,所以我无法打印并返回IO。好吧,或者至少我不知道如何。

致谢

1 个答案:

答案 0 :(得分:2)

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

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