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

Haskell自定义Tag类型如何非硬编码生成符合要求的列表

Haskell 非硬编码生成Tag列表方案

你可以通过列表推导式或者列表枚举+映射的方式生成目标列表,完全不需要逐个硬编码Tag元素。

首先先给你的Tag类型加上Show实例方便调试查看结果:

data Tag = Tag Char Int deriving (Show, Eq) -- Eq可选,按需添加即可

全范围笛卡尔积生成(AD每个字符对应13)

如果你需要每个字母都对应完整的1~3数值,直接用列表推导式即可:

fullTagList :: [Tag]
fullTagList = [Tag char num | char <- ['A'..'D'], num <- [1..3]]

生成结果和你举例的结构完全一致:[Tag 'A' 1, Tag 'A' 2, Tag 'A' 3, Tag 'B' 1, Tag 'B' 2, Tag 'B' 3, ..., Tag 'D' 3]

自定义范围生成(匹配你示例里的部分截断逻辑)

如果你需要不同字符对应不同的数值范围,比如B只到2、D从2开始,可以用映射+拼接的方式实现:

customTagList :: [Tag]
customTagList = concat 
  [ Tag 'A' <$> [1..3]
  , Tag 'B' <$> [1..2]
  , Tag 'C' <$> [1..3]
  , Tag 'D' <$> [2..3]
  ]

这里用<$>(也就是fmap)替代map写法更简洁。

  • 核心逻辑说明:
    • 字符范围直接用['A'..'D']枚举,Haskell的Char类型支持区间枚举,不需要手动写所有字符
    • 数值范围用[m..n]枚举,修改范围只需要调整起止数值即可
    • 两者的组合要么用列表推导式做笛卡尔积,要么针对每个字符单独指定数值范围再拼接,灵活度很高,完全不需要硬编码单个Tag元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:04