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

Haskell自定义数据类型Show实例实现问题:复用Player的Show行为

解决Spot类型Show实例的非穷举问题

你的代码里,Spot类型的Show实例只实现了None分支的匹配,完全没处理JustA Player的情况,这就是运行时抛出Non-exhaustive patterns异常的原因。

要实现show (JustA User)输出"X"、show (JustA COM)输出"O"的需求,只需要补全Spot的Show实例,复用已经定义好的Player的Show实现即可:

data Player = User | COM deriving Eq
data Spot   = JustA Player | None deriving Eq

instance Show Player where
    show User = "X"
    show COM  = "O"

instance Show Spot where
    show None     = " "
    show (JustA p) = show p  -- 新增这一行,匹配JustA构造器并调用Player的show方法

修改后测试:

  • show (JustA User) → "X"
  • show (JustA COM) → "O"
  • show None → " "

完全符合你想要的效果,也不会再触发非穷举模式的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:07:04