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
相关产品推荐
相关产品推荐

