因此,我有一个非常简单的函数,它接受两个参数:第一个是一小时(0 到 23 之间),第二个是一分钟(0 到 59 之间)。此函数返回小时加一分钟,并以漂亮的样式格式化小时。举例来说,hour 11 12
return 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
,我有一个错误,当我使用它时,我的代码是正确的。为什么?
谢谢您的解释!
你需要Eq
约束,因为你正在检查是否h
等于23
or 12
以及是否m
等于59
。您正在使用模式匹配来完成此操作,而不是==
,但是这种方式仍然需要与数字文字进行模式匹配Eq
(与构造函数的模式匹配不同)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)