这个示例程序中的缩进错误是什么?

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:".

对齐