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

Haskell中如何不用模式匹配,用getters提取嵌套数据结构字段?

不用模式匹配提取Person中的name的方法

有两种简便方式可以实现不在foo函数里直接使用模式匹配提取name:

1. 用记录语法定义数据类型

修改原数据类型的定义,使用Haskell的记录语法,编译器会自动生成对应的访问器函数:

data Token = Token { tokenName :: String, tokenId :: Int } deriving (Show)
data Person = Person { personToken :: Token } deriving (Show)

之后在foo里直接组合访问器即可:

foo :: Person -> String
foo p = "hello " ++ tokenName (personToken p)

2. 手动封装访问器函数

如果不想改动原数据类型的定义,可以手动写两个封装了模式匹配的访问器函数,在foo里直接调用:

-- 从Person中取出Token
getPersonToken :: Person -> Token
getPersonToken (Person t) = t

-- 从Token中取出name
getTokenName :: Token -> String
getTokenName (Token name _) = name

foo :: Person -> String
foo p = "hello " ++ getTokenName (getPersonToken p)

这种方式下,foo函数本身没有使用模式匹配,把模式匹配的逻辑隐藏在了辅助函数里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:50:55