如何手动实现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
相关产品推荐
相关产品推荐

