2013-05-30 69 views
2

當我試圖編譯它時,下面的do塊會拋出錯誤「輸入conn'解析錯誤」。我已經嘗試了許多不同的if-then-else語句的配置,無濟於事。數據庫邏輯在我添加條件之前就工作了,所以這沒有問題。我在其他線路上有太多線路嗎?有沒有什麼辦法可以解決這個問題,而不需要完全修改邏輯?Haskell中的「輸入解析錯誤」if-then-else有條件的

main = do 
    contents <- BL.getContents 
    let myData = decode contents :: Maybe Data 
    if maybe True (\x -> result x /= "success") myData 
     then error ("JSON download failed") 
     else let myTrades = process myData 
     conn <- connectSqlite3 "trades.db" 
     insert <- DB.prepare conn "INSERT INTO trades VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);" 
     DB.executeMany insert $ map (\xs -> map DB.toSql xs) myTrades 
     DB.commit conn 
     DB.disconnect conn 
+0

有結束了兩個問題。第一個是下面答案中描述的那個; 「其他」之後我需要「做」。此外,最後四行需要縮進與「let」中的「l」相同的列中。 – Mike

回答

5

您需要else像這樣以後引進do塊:

else do let myTrades = process myData 
      conn <- connectSqlite3 "trades.db" 
      insert <- DB.prepare conn "INSERT INTO trades VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);" 
      DB.executeMany insert $ map (\xs -> map DB.toSql xs) myTrades 
      DB.commit conn 
      DB.disconnect conn 
+0

我還需要將最後四列與「let」中的「l」對齊。但這是主要問題。謝謝。 – Mike