2014-03-04 37 views
0

我試圖從用戶追加一些輸入到文件中。但是我收到一個奇怪的錯誤...它說,追加只能取2個參數,而不是4如何將用戶輸入附加到文件中Haskell

這是代碼:

ame :: IO() 

ame = do 

    putStr "Enter the file name: " 
    name <- getLine 
    putStrLn "Do you want to add new records? " 
    question <- getLine 
    if question == "yes" then do 
     putStrLn "Enter your records:" 
     newRec <- getLine 
     appendFile name ('\n':newRec) 

     putStrLn "enter something new: " 
     something <- getLine 
     appendFile name ('\n':something) 

     putStrLn "enter something new again: " 
     something2 <- getLine 
     appendFile name ('\n':something2) 
     putStrLn "a" 
    else 
     putStr "b" 

有人可以幫助我?

+4

這次請不要刪除你的問題 - 等待我回答! (我寫了一個完整的答案,但你在寫作時刪除了這個問題) – AndrewC

+0

是的。抱歉。我刪除了第一個,因爲在某個時候它工作。但後來..發生了另一個問題.. – Selyst

+0

這是同樣的問題...堅持.... – AndrewC

回答

4

使用空格而不是製表符

您已經使用製表符和空格的混合物在文件中。這往往會導致混淆,因爲你,編輯和Haskell傾向於以不同的方式解釋這些。

用適當數量的空格替換代碼中的所有選項卡以將其排成一行,您將停止獲取這些神祕錯誤。

讓你的編輯器縮進你

很多編輯器有一個設置在tab鍵給你的空間的適當數量,並按下Enter鍵加空格排隊您與以前的文本,退格將您取消至上一縮進。這些設置非常方便 - 打開它們。

你的錯誤信息:爲什麼

特別是,在你的第一個問題,它認爲appendFile是一個模式,在這個版本中它認爲putStrLn "enter something new again: "是前行的一部分,因爲它比你進一步縮進認爲。如果你點擊編輯你的問題(不需要改變任何東西),你會發現它沒有排隊。

+0

謝謝。哈斯克爾非常......「微妙」。現在它工作... – Selyst

+2

不,編輯非常不一致。佈局很可愛。我根本不會錯過'{',';'或'}'。我只是沒有。當我用其他語言使用它們時,我覺得我已經回到了方舟的時代,這一切都是沒有必要的。 – AndrewC

+1

@Simplle它不比任何其他語言更微妙。如果在C中有'some_function(a,b,c d);'我錯過了單個字符,它不會編譯。 Python也會強制使用空格,並且您可以成功地混合空格,但這往往會導致解析器出現奇怪錯誤消息的問題。 – bheklilr

相關問題