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

如何从Haskell自定义data类型中提取指定变量并修改字段值

函数实现方案

1. 修正Novel类型定义

你当前的Novel类型定义不符合Haskell语法规范,推荐用记录语法定义方便后续字段操作,修正后的定义如下:

data Novel = Novel
  { title  :: String
  , year   :: Int
  , bought :: Bool
  } deriving (Show)

注意要点:

  • 类型构造器与值构造器首字母必须大写
  • 记录字段用大括号包裹,多字段间用逗号分隔
  • deriving后的派生类需要用括号包裹

2. 实现getTitle函数

如果用上述记录语法定义Novel,Haskell会自动生成对应字段的取值函数,直接复用即可:

getTitle :: Novel -> String
getTitle = title

如果不用记录语法,用模式匹配也可以实现:

-- 非记录语法的Novel定义
data Novel = Novel String Int Bool deriving (Show)

getTitle :: Novel -> String
getTitle (Novel t _ _) = t

3. 修正并实现setBought函数

你给出的setBought签名存在类型错误,入参应为Novel而非Person,第二个入参是要设置的Bool类型的bought新值,正确实现如下:

记录语法版本(更简洁)

setBought :: Novel -> Bool -> Novel
setBought novel newVal = novel { bought = newVal }

非记录语法版本

setBought :: Novel -> Bool -> Novel
setBought (Novel t y _) newVal = Novel t y newVal

额外说明:Haskell为纯函数式语言,上述实现不会修改原Novel对象,而是返回一个修改了bought字段的新Novel对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:54:03