0

这是我认为不应该引起任何问题但出于某种原因会引起任何问题的代码?

    program = expr8
        <|> seqOfStmt  

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

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

如果有任何替代方案,我非常想听听他们的意见!

在此先感谢, 肖恩

4

1 回答 1

3

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

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

因此,您的return行被解析为上一行的延续,并且list尚未在范围内。

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


一旦你解决了这个问题,你的下一个错误可能是一个类型错误:head list并且Seq list有不同的类型(除非你head因为某种原因重新定义了)。如果列表仅包含一个元素,则不清楚为什么要以不同方式处理列表。

于 2013-02-28T10:06:01.767 回答