Haskell新手求助:重写anyChar解析器遇缩进错误如何解决?
问题解决:Haskell解析器代码的缩进与语法错误
你的代码存在两处关键问题导致语法/缩进错误,修正后的代码如下:
-- 修正后的 anyCharInp anyCharInp :: Parser Char anyCharInp = MkParser sf where sf inp = case inp of (c:cs) -> Just c _ -> Nothing
错误原因说明
- 缺少函数定义:你在
where块中直接使用case表达式,但未定义sf函数——MkParser需要接收一个String -> Maybe Char类型的函数作为参数,必须显式声明这个sf函数。 - 未绑定输入参数:
inp是输入字符串,需要作为sf的参数传入,因此要将sf声明为接收inp的函数,再在函数体内用case处理输入内容。 - 缩进规则:Haskell要求
case的分支语句缩进程度大于case关键字本身,修正后的代码中分支比case inp of多缩进一层,符合语法规范。
内容的提问来源于stack exchange,提问作者user20102550
相关产品推荐
相关产品推荐

