- 論壇徽章:
- 0
|
在real world haskell 里面看到一個例子. 就比葫蘆畫瓢的寫了一遍.
結(jié)果從編譯失敗. 每個字母都檢查了一下, 一模一樣. 最后復(fù)制 例子 , 編譯通過.
最后發(fā)現(xiàn)是縮進的問題. 代碼如下:
正確的代碼如下:
import System.IO
import Data.Char(toUpper)
main :: IO ()
main = do
inh <- openFile "input.txt" ReadMode
outh <- openFile "output.txt" WriteMode
mainloop inh outh
hClose inh
hClose outh
mainloop :: Handle -> Handle -> IO ()
mainloop inh outh =
do ineof <- hIsEOF inh
if ineof
then return ()
else do inpStr <- hGetLine inh
hPutStrLn outh (map toUpper inpStr)
mainloop inh outh
不正確的代碼如下:
import System.IO
import Data.Char(toUpper)
main :: IO ()
main = do
inh <- openFile "input.txt" ReadMode
outh <- openFile "output.txt" WriteMode
mainloop inh outh
hClose inh
hClose outh
mainloop :: Handle -> Handle -> IO ()
mainloop inh outh =
do ineof <- hIsEOF inh
if ineof
then return ()
else do inpStr <- hGetLine inh
hPutStrLn outh (map toUpper inpStr)
mainloop inh outh
編譯的時候提示:
[1 of 1] Compiling Main ( interactwith.hs, interactwith.o )
interactwith.hs:17:19:
The last statement in a 'do' construct must be an expression
誰能解釋一下, haskell 的縮進是怎么回事? 應(yīng)該怎么處理. 本來一個小程序, 結(jié)果折騰了一個上午. 非常感謝. |
|