You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Haskell中正确返回嵌套类型?返回Diff类型报错求助

问题修正方案

错误原因分析

你的代码存在两个核心问题:

  1. 构造器调用错误:Diff是UtilsOrDiff的构造器,仅接受一个UtilsDiff类型参数,但你直接传入了两个空列表。而UtilsDiff自身的构造器才需要两个[String]类型的参数。
  2. 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值提升到Parser monad中,满足do块的类型要求

内容的提问来源于stack exchange,提问作者student422

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 11:01:34