stu*_*ith 6 recursion haskell exception-handling
我正在尝试通过编写小程序来学习Haskell ...所以我正在为简单的表达式编写词法分析器/解析器.(是的,我可以使用Alex/Happy ......但我想先学习核心语言).
我的解析器本质上是一组构建树的递归函数.在语法错误的情况下,我通常会抛出一个异常(即如果我是用C#编写的),但在Haskell中似乎不鼓励这样做.
那么替代方案是什么?我真的不想在解析器的每一位中测试错误状态.我希望最终得到一个有效的节点树,或者带有详细信息的错误状态.
小智 5
对于可能会失败的计算失败的详细信息,有类型Either a b,例如Either ErrorDetails ParseTree,所以你的结果可能是Right theParseTree或Left ErrorDetails.您可以在递归函数中对这些构造函数进行模式匹配,如果出现错误,则将其传递给它; 否则你像往常一样继续.