如何使用带有 Intellij(Haskell 插件)的 scotty 登录终端?

How to log to terminal using scotty with Intellij (Haskell plugin)?

所以我遇到了一些奇怪的事情。这是一个说明性代码示例:

main :: IO ()
main
 = do
     scotty 8000 $ do
       get "/" serve
 where
  serve :: ActionM ()
  serve = do
    liftIO $ print "I'm about to serve a request!"

每当我输入 "localhost:8000/" 时,我的消息应该会打印到 IntelliJ 控制台,但事实并非如此。然而,当我注释掉 scotty 的东西时,只有:

main :: IO ()
main
 = do print "Hello World!"

IntelliJ 打印出来没有问题。我究竟做错了什么?当我使用 Windows 命令提示符 运行 可执行文件(例如 ghc --make 来创建它,然后 运行ning 它),一切正常 - "I'm about to serve a request!" 打印到每次我输入 "localhost:8000/"

命令提示符终端

想通了。需要制作一个记录器如下:

 logger <- mkRequestLogger def {
   outputFormat = CustomOutputFormat (\_ _ _ _ -> "")
   }

这样生成的代码将如下所示:

main :: IO ()
main
 = do
     logger <- mkRequestLogger def {
       outputFormat = CustomOutputFormat (\_ _ _ _ -> "")
       }
     scotty 8000 $ do
       middleware logger
       -- do stuff here

CustomOutputFormat 忽略所有其他传入信息,只关注您要打印到控制台的内容。