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

Haskell中如何判断自定义数据类型变量所属的构造子种类?

解决方案

Haskell中判断代数数据类型的构造子最直接的方式是模式匹配,有几种常用实现方式:

  • 单独写判断函数,适合多处复用的场景
    如果你只需要判断是否为Number构造子,可以写如下函数:
    isNumber :: Token -> Bool
    isNumber (Number _) = True
    isNumber _ = False
    
    调用isNumber a就会返回True,传入Foo/Bar则返回False。
  • 写取值函数,同时完成判断和取值
    如果你后续需要用到构造子里的Int值,可以写返回Maybe Int的函数,避免二次模式匹配:
    getNumber :: Token -> Maybe Int
    getNumber (Number n) = Just n
    getNumber _ = Nothing
    
    调用getNumber a会得到Just 20,你可以直接对这个Maybe值做后续处理,比如用fromMaybe 0 (getNumber a)给默认值,或者用case分支处理不同情况。
  • 就地用case表达式处理
    如果只需要单次判断,不需要复用逻辑,可以直接在使用位置写case分支:
    case a of
      Number n -> -- 这里n就是取出的Int值,可以直接做数值运算
      _ -> -- 非Number构造子的处理逻辑
    

注意:你不能直接把Token类型的变量当做Int类型使用,必须通过模式匹配把Number构造子包裹的Int值取出后,才能对该Int值进行数值操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:54:00