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

Haskell如何计算下一个工作日?代码报错怎么解决?如何自动缩进?

代码存在的问题

你提供的代码存在三类核心错误,完全无法编译运行,也不符合需求:

  • 变量使用错误:函数参数为day但代码全程没有引用该参数,反而使用了未定义的变量x;同时let x = ...定义的是then分支内的局部变量,外部作用域完全无法访问,逻辑完全不成立。
  • 语法结构错误:Haskell中if是必须配对else的表达式而非过程语句,你当前写的多个串行无配对else的if不符合语法要求,且末尾else后额外加then属于明显语法错误。
  • 业务逻辑错误:需求是返回下一个工作日(跳过周六、周日),你的代码即使修复语法问题,实现的也是返回当前的下一天,例如周五的返回值为周六,完全不符合需求。

修复后的正确实现示例(使用Haskell模式匹配特性,更简洁易读):

-- | Days of week.
data Day = Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday deriving (Eq, Show)

-- | Returns the next weekday (excluding weekend, namely Saturday and Sunday).
nextWeekday :: Day -> Day
nextWeekday Friday = Monday
nextWeekday Saturday = Monday
nextWeekday Sunday = Monday
nextWeekday Monday = Tuesday
nextWeekday Tuesday = Wednesday
nextWeekday Wednesday = Thursday
nextWeekday Thursday = Friday
Haskell代码自动缩进格式化方法

你可以使用成熟的格式化工具实现一键自动格式化:

  • 社区首推无配置工具ormolu,安装完成后执行命令ormolu --mode inplace 目标文件.hs即可自动修正缩进、空格等所有格式问题,符合Haskell社区通用编码规范。
  • 若需要少量自定义格式规则,可以使用fourmolu,它是ormolu的衍生版本,支持通过配置文件调整格式规则。
  • 如果你使用Stack或Cabal管理项目,可以将格式化工具配置为构建前置钩子,每次构建项目时自动执行格式化操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:39:02