这里是我认为不应该引起任何问题的代码,但由于某种原因呢?Haskell Parsec出现多个表达式的奇怪问题
program = expr8
<|> seqOfStmt
seqOfStmt =
do list <- (sepBy1 expr8 whiteSpace)
return $ if length list == 1 then head list else Seq list
我得到3个错误全部在'列表'不在范围内? 这可能是公然明显什么是错的,但我不明白为什么
如果有任何替代品,我会非常喜欢听到他们!
在此先感谢,肖恩
你的缩进看起来很糟糕('program'和'seqOfStmt'后面的行应该比定义更加缩进,除此之外,在不知道你的其他定义是什么的情况下测试你的程序是非常困难的(例如'expr8' ,'whiteSpace'和'Seq'从哪里来?) – 2013-02-28 10:04:18
问题是你正在返回的值的类型:'如果长度列表== 1然后是头列表否则Seq列表' - 比方说列表是[a],那么你在then子句中返回一个和else子句中非常不同的东西(除非Seq是类型为[a] - > a'的构造函数,这是不容易的)。 – Ingo 2013-02-28 10:18:02