编写Ramsch卡牌游戏时遇Compare未在作用域错误,求原因
问题:Haskell卡牌游戏Ord实例定义报错:Not in scope: data constructor `Compare'
错误原因
Haskell对大小写敏感,首字母大写的标识符属于数据构造器或类型名称范畴,而Ord类型类要求实现的是小写的compare函数(该函数默认从Prelude导入)。你把函数名写成了大写的Compare,编译器会将其识别为未定义的数据构造器,因此触发了这个报错。
修正后的代码
只需将大写的Compare改为小写的compare,同时注意代码缩进(Haskell对缩进敏感,compare需与instance块内的内容对齐):
instance Ord Card where compare c1 c2 | color c1 == color c2 || rank c1 == Bube && rank c2 /= Bube || rank c1 /= Bube && rank c2 == Bube = compare (rank c1) (rank c2) | rank c1 == Bube && rank c2 == Bube = compare (color c1) (color c2) | otherwise = GT
内容的提问来源于stack exchange,提问作者user20556088
相关产品推荐
相关产品推荐

