Haskell Parsec出现多个表达式的奇怪问题

时间:2013-02-28 09:55:05

标签: haskell parsec

这里的代码在我看来不应该引起任何问题,但出于某种原因呢?

    program = expr8
        <|> seqOfStmt  

    seqOfStmt = 
        do list <- (sepBy1 expr8 whiteSpace)
            return $ if length list == 1 then head list else Seq list

关于“列表”不在范围内,我得到3个错误? 可能明显出现了什么问题,但我无法弄明白为什么

如果有任何替代方案,我非常希望听到它们!

提前致谢, 肖恩

1 个答案:

答案 0 :(得分:3)

最后一行使用制表符进行缩进,而其他行只使用空格。

您在编辑器中将标签设置为四个空格,但ghc使用八个字符制表位(就像终端一样)。

因此,您的return行会被解析为上一行的延续,而list尚不在范围内。

解决此问题的一种简单方法是避免使用标签:仅使用空格。


修复后,您的下一个错误可能是类型错误:head listSeq list有不同的类型(除非您出于某种原因重新定义了head)。如果列表只包含一个元素,则不清楚为什么要对列表进行不同的处理。