首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么添加"Eq“类型约束而不使用"=="?

为什么添加"Eq“类型约束而不使用"=="?
EN

Stack Overflow用户
提问于 2013-03-20 07:35:00
回答 1查看 496关注 0票数 16

所以,我有一个非常简单的函数,它有两个参数:第一个是一个小时(在0到23之间),第二个是一分钟(在0到59之间)。此函数返回小时加一分钟,并以漂亮的样式格式化小时。例如,hour 11 12返回11 heures et 13 minutes。很抱歉,该小时的法语格式。

因此,我在这个函数中使用了show函数,并且参数必须是一个数字,所以我使用了类型声明(Num a, Show a) => a -> a -> String。但是,当我尝试这个函数时,我得到了一个错误,GHC告诉我添加Eq类型约束,但我不明白为什么在这种情况下需要Eq类型约束。这里有代码(很抱歉函数中使用了法语文本,但如果您不理解函数名称和文本,我认为这并不是很重要):

heure :: (Num a, Eq a, Show a) => a -> a -> String
heure 23 59 = "Minuit"
heure 12 m  = "Midi et " ++ show (m+1) ++ " minutes"
heure h 59  = show (h+1) ++ " heures"
heure h m   = show h ++ " heures et " ++ show (m+1) ++ " minutes"

所以:如果我不使用Eq,我就会出错,当我使用它时,我的代码是正确的。为什么?

谢谢你的解释!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-20 07:41:41

您需要Eq约束,因为您要检查h是否等于2312,以及m是否等于59。您使用的是模式匹配,而不是==,但是针对数字文字的模式匹配仍然需要Eq (与针对构造函数的模式匹配不同)。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15512541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档