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

PureScript中compare声明参数列表长度不一致错误原因咨询

问题分析:Ord实例定义中的参数列表不匹配错误

你定义的Line类型Ord实例代码如下:

import Prelude

data Line = Front | Middle | Back

derive instance eqLine :: Eq Line

instance ordLine :: Ord Line where
  compare a b | a == b = EQ
  compare Front _ = LT
  compare Back _ = GT
  compare = flip compare

编译时出现错误:Argument list lengths differ in declaration compare,但将最后一行改为compare a b = flip compare a b后即可正常编译,且flip compare的类型确实是forall (t4 :: Type). Ord t4 => t4 -> t4 -> Ordering,符合compare的签名。

报错原因

在PureScript(以及同类型函数式语言)的实例定义中,同一个函数的所有定义分支必须保持参数列表形式一致:

  • 前面三个compare分支都是显式写出两个参数的模式匹配写法(比如a b、Front _);
  • 最后一行的compare = flip compare是直接将函数值绑定到compare,没有显式声明参数,属于无参数的函数绑定写法。

编译器会判定这种混合写法为参数列表长度不一致——它无法统一解析同一个函数的不同定义形式。当你把最后一行改成显式带参数的compare a b = flip compare a b后,所有分支都采用了带参数的写法,编译器就能正确识别这是同一个函数的完整定义,从而通过编译。

内容的提问来源于stack exchange,提问作者Robb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:50:31