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

编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:50:27