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

如何手动实现Haskell的Show类型类实例?解决构造器未识别报错

解决Haskell自定义Show实例的报错问题

你的错误出在自定义Show实例的模式匹配上:Mood是类型名称,并非可用于模式匹配的数据构造器,你的Mood类型的构造器是Blah和Woot,需要针对这两个构造器分别实现show函数。

修改后的代码如下:

data Mood = Blah | Woot
changeMood :: Mood -> Mood
changeMood Blah = Woot
changeMood Woot = Blah

instance Show Mood where
    show Blah = "Mood: Blah"
    show Woot = "Mood: Woot"

main = do
    print (changeMood Blah)
    print (changeMood Woot)

如果想要更简洁的实现,也可以用分支判断的方式:

instance Show Mood where
    show mood = "Mood: " ++ case mood of
        Blah -> "Blah"
        Woot -> "Woot"

运行修改后的代码,会输出自定义格式的内容:

Mood: Woot
Mood: Blah

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:25:24