2017-09-13 45 views
0

我一直在使用I/O寫入Haskell中的文件,但它只是坐在那裏運行,沒有結束產品。我的程序似乎無限運行,我不確定它在哪裏不能繼續

main :: IO() 
main = do 
    hawkID <- getLine 
    let text = "module Operations where\nimport " ++ hawkID ++ "\n\nsample :: (" ++ hawkID ++ "a)\nsample = B\n\ 
                         \size :: (" ++ hawkID ++ " a) -> Int\nsize x = 0\n\n\ 
                         \depth :: (" ++ hawkID ++ " a) -> Int\ndepth x = 0\n\n\ 
                         \dropN :: (" ++ hawkID ++ " a) -> (" ++hawkID ++ " a)\ndropN x = x\n\n\ 
                         \countB :: (" ++ hawkID ++ " a) -> Int\ncountB x = 0\n\ 
                         \ltoB :: (" ++ hawkID ++ " a) -> (" ++ hawkID ++ " b)\nltoB x = B\n\n\ 
                         \toString :: (" ++ hawkID ++ " a) -> String\ntoString x = \"\"\n\n\ 
                         \mapHawkid :: (a -> b) -> (" ++ hawkID++ " a) -> (" ++ hawkID ++ " b)\n\n\ 
                         \substB :: (" ++ hawkID ++ " a) -> (" ++ hawkID ++" a) -> (" ++ hawkID ++ " a)\n\ 
                         \substB x y = B" 
    let file = writeFile "Desktop/hawkID.hs" text 

    return() 
+2

它只是在等待你的標準輸入輸入'hawkID' ...輸入一個ID並按ENTER鍵。 –

回答

1

您是否正在輸入文本並按回車鍵以滿足getLine調用?將沒有提示。如果您想要提示,我認爲您需要(例如)putStr,並可能禁用輸出緩衝。

此外,您的通話writeFile將不進行評估 - 你需要把它的do塊就像身體一樣:

import System.IO 

main :: IO() 
main = do 
    hSetBuffering stdout NoBuffering 
    putStr "Hawk ID: " 
    hawkID <- getLine 
    let text = ... 
    writeFile "hawkID.hs" text 
+0

啊,我不是,我認爲它會讀它像:主Biehl例如。謝謝! – hawkeye

+2

@hawkeye Ah no'getLine'從標準輸入讀取一行。對於命令行參數,您可以使用'System.Environment'中的'getArgs'。當然,我認爲你可以直接輸入,而不是直接輸入。 – ryachza

相關問題