2017-06-03 55 views
1

所以我有一些奇怪的事情發生。下面是一個說明性的代碼示例:如何用Intellij(Haskell插件)使用scotty登錄到終端?

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

我的消息應該打印到控制檯的IntelliJ每當我輸入「本地主機:8000 /」,但事實並非如此。然而,當我註釋掉scotty的東西,只是有:

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

IntelliJ沒有問題打印出來。我究竟做錯了什麼?當我使用Windows命令提示符運行可執行文件(例如ghc --make來創建它,然後運行它)時,一切正常 - 「我即將提供請求!」打印到命令提示符終端,每次輸入「localhost:8000 /」

+0

是scotty堆棧重定向標準輸出的東西?也許捕獲它的記錄和放在stderr?我不熟悉intellij – jberryman

+0

你是對的,是的。剛回答我自己的問題。很煩人... – Enis

回答

0

找出來。需要做出記錄如下:

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

使得所得到的代碼是這樣:

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

的CustomOutputFormat忽略所有其他傳入信息,只注重要打印到控制檯什麼。