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

如何使用scotty with Intellij(Haskell插件)登录终端?,haskell,intellij-idea,terminal,intellij-plugin,scotty,Haskell,Intellij Idea,Terminal,Intellij Plugin,Scotty,所以我有一些奇怪的事情发生了。下面是一个说明性的代码示例: 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控制台,但它没有。然而,当我把sc

所以我有一些奇怪的事情发生了。下面是一个说明性的代码示例:

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创建它,然后运行它)时,一切正常——“我就要处理一个请求了!”每次我输入“localhost:8000/”

时,都会打印到命令提示符终端。需要按如下方式制作记录器:

 logger <- mkRequestLogger def {
   outputFormat = CustomOutputFormat (\_ _ _ _ -> "")
   }
logger”“)
}
因此,生成的代码如下所示:

main :: IO ()
main
 = do
     logger <- mkRequestLogger def {
       outputFormat = CustomOutputFormat (\_ _ _ _ -> "")
       }
     scotty 8000 $ do
       middleware logger
       -- do stuff here
main::IO()
主要的
做
记录器“”)
}
斯科特8000美元
中间件记录器
--在这里做事

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

解决了这个问题。需要按如下方式制作记录器:

 logger <- mkRequestLogger def {
   outputFormat = CustomOutputFormat (\_ _ _ _ -> "")
   }
logger”“)
}
因此,生成的代码如下所示:

main :: IO ()
main
 = do
     logger <- mkRequestLogger def {
       outputFormat = CustomOutputFormat (\_ _ _ _ -> "")
       }
     scotty 8000 $ do
       middleware logger
       -- do stuff here
main::IO()
主要的
做
记录器“”)
}
斯科特8000美元
中间件记录器
--在这里做事

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

scotty堆栈中是否有重定向标准输出的内容?也许捕获它以便记录并在stderr上发送?我不熟悉intellijYou是对的,是的。刚才回答了我自己的问题。真烦人…scotty堆栈中有东西重定向stdout吗?也许捕获它以便记录并在stderr上发送?我不熟悉intellijYou是对的,是的。刚才回答了我自己的问题。真烦人。。。