我是Haskell的新手,如果问题很傻,请提前抱歉,但是我无法在google中找到解决方案。
假设我有一个使用Scotty网络框架的程序:
responseUserByName :: ActionM ()
responseUserByName = do name <- param "name"
user <- liftAndCatchIO $ getUserByUserName name
json user
我想添加一个日志,因为它在运行时失败了,我不知道为什么。所以我的想法是在do块中添加一些打印内容以检查值。
但是由于do
块必须返回ActionM
,所以我无法打印并返回IO
。好吧,或者至少我不知道如何。
致谢
答案 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