这里的代码在我看来不应该引起任何问题,但出于某种原因呢?
program = expr8
<|> seqOfStmt
seqOfStmt =
do list <- (sepBy1 expr8 whiteSpace)
return $ if length list == 1 then head list else Seq list
关于“列表”不在范围内,我得到3个错误? 可能明显出现了什么问题,但我无法弄明白为什么
如果有任何替代方案,我非常希望听到它们!
提前致谢, 肖恩
答案 0 :(得分:3)
最后一行使用制表符进行缩进,而其他行只使用空格。
您在编辑器中将标签设置为四个空格,但ghc使用八个字符制表位(就像终端一样)。
因此,您的return
行会被解析为上一行的延续,而list
尚不在范围内。
解决此问题的一种简单方法是避免使用标签:仅使用空格。
修复后,您的下一个错误可能是类型错误:head list
和Seq list
有不同的类型(除非您出于某种原因重新定义了head
)。如果列表只包含一个元素,则不清楚为什么要对列表进行不同的处理。