这个示例程序中的缩进错误是什么?
Whats the indentation error in this example program?
我不明白为什么会出现缩进错误
[1 of 1] Compiling Main ( main.hs, main.o )
main.hs:19:17: parse error on input `case'
每个缩进都设置了制表符
我需要使用空格而不是制表符吗?
import Text.ParserCombinators.Parsec
csvFile = endBy line eol
line = sepBy cell (char ',')
cell = many (noneOf ",\n\r")
eol = try (string "\n\r")
<|> try (string "\r\n")
<|> string "\n"
<|> string "\r"
<|> fail "Couldn't find EOL"
parseCSV :: String -> Either ParseError [[String]]
parseCSV input = parse csvFile "(unknown)" input
main =
do c <- getContents
case parse csvFile "(stdin)" c of
Left e -> do putStrLn "Error parsing input:"
print e
Right r -> mapM_ print r
如果您的代码看起来与此处完全相同,那么问题是 case
与上面的 c <- getContents
不一致;你需要将它缩减一个 space。此外,您需要将 print e
缩进一个 space 以使其与 putStrLn "Error parsing input:"
.
对齐
我不明白为什么会出现缩进错误
[1 of 1] Compiling Main ( main.hs, main.o )
main.hs:19:17: parse error on input `case'
每个缩进都设置了制表符
我需要使用空格而不是制表符吗?
import Text.ParserCombinators.Parsec
csvFile = endBy line eol
line = sepBy cell (char ',')
cell = many (noneOf ",\n\r")
eol = try (string "\n\r")
<|> try (string "\r\n")
<|> string "\n"
<|> string "\r"
<|> fail "Couldn't find EOL"
parseCSV :: String -> Either ParseError [[String]]
parseCSV input = parse csvFile "(unknown)" input
main =
do c <- getContents
case parse csvFile "(stdin)" c of
Left e -> do putStrLn "Error parsing input:"
print e
Right r -> mapM_ print r
如果您的代码看起来与此处完全相同,那么问题是 case
与上面的 c <- getContents
不一致;你需要将它缩减一个 space。此外,您需要将 print e
缩进一个 space 以使其与 putStrLn "Error parsing input:"
.