2015-02-06 33 views
0

我不能看到为什么有压痕错误这个示例程序中的缩进错误是什么?

编译主(main.hs,main.o),此

main.hs [1 1]:19:17:输入解析错误`案”

每个缩进设置制表符

我需要用空格代替标签?

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 
+2

强烈建议切换到空格。它在Haskell中效果更好。我知道人们喜欢他们的标签,如果你非常小心,可以在Haskell中使用它们,但大多数人只是默认使用空格。 – bheklilr 2015-02-06 19:09:17

+0

标签的使用并未正式废弃,但GHC 7.10默认打开'-fwarn-tabs'。使用选项卡会强制使用显示选项卡为8个空格的编辑器,或者确保每个“块”都在新行上开始。其他编辑你的代码的人可能会首先想知道发生了什么,然后用空格重做它。所以不要这样做。 – dfeuer 2015-02-06 20:09:16

回答

1

如果你的代码看起来完全一样,因为它在这里所做的,那么问题是,casec <- getContents上面排队;你需要将它缩小一个空间。此外,您需要将print e缩进一个空格,以便与putStrLn "Error parsing input:"对齐。