2014-04-24 52 views
0

我必須做一個問題,它接收一個int n並計算將它放入IO中的n個整數之和。解析錯誤(可能是不正確的縮進或不匹配的括號)

這是代碼

ej13 :: Integer -> IO() 
ej13 n = do if n==0 
       then return 0 
       else do m <- getLine 
         let eme = read m :: Int 
         return (n+m) 

什麼是該代碼的問題? 謝謝。

+1

即使您修正了縮進,因爲您試圖將字符串'm'添加到整數'n',所以這不會編譯。您可能打算使用'eme'來代替。您的返回類型應該是'IO Integer',並且您還需要進行遞歸調用以獲取剩餘值的總和。 – Lee

回答

2

您的代碼混合了製表符和空格;停止這樣做,只需將其全部更改爲至標籤

+2

或將它們全部更改爲空格。我並不是想重新開始這個論點,標籤很好,但我會推薦空格,因爲GHC將標籤解釋爲8個空格,而當您將標籤設置爲2或4個空格時,它可能看起來是正確的[它仍然可以生成一個解析錯誤](https://ghc.haskell.org/trac/haskell-prime/wiki/Tabs)。 – bheklilr

+0

@bheklilr:是的,空間是最適合這種類型的佈局使用;不過,當'do'在另一行時,我更喜歡它,因此評論。具有諷刺意味的是,對齊標籤並不美觀= D – Ryan

相關問題