2016-09-17 76 views
0

我有一個程序生成JSON並將其打印到文件。生成JSON的函數在代碼生成過程中可能會失敗。Haskell:中止寫入文件錯誤

在JSON生成失敗的時刻,到此爲止生成的代碼仍然被寫入文件,給我一個不完整/不正確的輸出文件。

我想弄清楚如何防止寫入錯誤的輸出。喜歡的東西:

main = do 
    let 
    output   = encodingfunction 
    print' (Just x) = writeFile "outputfile" output 
    print' _  = putStrLn "Encoding Failed Miserably" 
    print' ouput 
    return() 

encodingfunction :: Maybe String 
+0

您需要'encodingFunction'來更改,返回'Maybe String'而不是返回可能在某處出現錯誤的'String'。 – amalloy

+0

@amalloy我對「編碼功能」進行了修改,但仍然存在相同的問題。我是否必須將程序中的每個函數都更改爲'Maybe'類型? – matthias

+0

正如你所寫的,你的代碼應該可以工作,儘管你應該在'writeFile'調用中使用'x'而不是'output'。如果你仍然有問題,請製作一個[最小,完整和可驗證的例子])http://stackoverflow.com/help/mcve),這樣回答者可以看到錯誤。 – amalloy

回答

0

你可能想強制返回的字符串的評估,以便編碼功能是肯定做了你開始寫入文件之前。 Mabye在打印之前可以檢查它的長度。