我正在尝试为配置文件编写解析器,但遇到了一个奇怪的错误,解析器只是冻结了。代码可以在这里看到。我已经在调试器中运行它,它似乎发生在行中
p_server_entry = many settings *> pure ()
在“纯()”的评价。也就是说,如果可以信任调试器的行为,则尝试从 p_server_entry 返回似乎会失败。我尝试删除“纯()”语句并简单地返回“[()]”(并显然调整类型签名)但它似乎挂在同一个地方。我知道 Parsec 不支持左递归,但我看不到这里发生了什么?
我正在做的是,我正在使用 Parsec 通过用户状态为我填写一条记录。对于返回值,我只是从所有函数中返回 (),因为配置记录将从状态中检索并作为解析结果返回。导致挂起的示例文件是:
[server]
port = 80
我通过在 ghci 中运行 Parser.hs 文件来测试这一点(尽管编译程序并运行它会得到相同的结果)然后执行
:m + Data.Monoid
parseConfigFile "test.config" mempty
我感谢任何人可以提供的任何帮助。
编辑:我应该提到这几乎和以前一样工作。我将它从返回一个特殊的解析树更改为直接更新配置结构。