如何在Haskell中正确返回嵌套类型?返回Diff类型报错求助
问题修正方案
错误原因分析
你的代码存在两个核心问题:
- 构造器调用错误:
Diff是UtilsOrDiff的构造器,仅接受一个UtilsDiff类型参数,但你直接传入了两个空列表。而UtilsDiff自身的构造器才需要两个[String]类型的参数。 - Monad上下文不匹配:在Parsec的
do代码块中,每个分支必须返回Parser UtilsOrDiff类型的值,但你直接返回了UtilsOrDiff实例,需要用return将值包装到Parser monad中。
修正后的代码
将出错的行替换为:
Nothing -> return $ Diff (UtilsDiff [] [])
完整修正片段
useBlockExpr :: Parser UtilsOrDiff useBlockExpr = do u1 <- syntaxExpr opts <- optionsBlockExpr _ <- absorbToStopWord "Description:" utilDesc <- many anyChar case options u1 of Nothing -> return $ Diff (UtilsDiff [] []) -- 修正后的行 Just val-> do ... -- 你的原有逻辑
额外说明
UtilsDiff [] []构造出一个两个字段均为空列表的UtilsDiff实例Diff (...)将该实例包装为UtilsOrDiff类型return把最终的UtilsOrDiff值提升到Parsermonad中,满足do块的类型要求
内容的提问来源于stack exchange,提问作者student422
相关产品推荐
相关产品推荐

