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

Haskell中使用重复参数定义模式同义词出现冲突定义问题

模式同义词定义编译错误原因解析

问题代码

pattern Double a = (a,a)

编译错误信息

error:
• Conflicting definitions for ‘a’
Bound at: :1:21
:1:23
• In a pattern synonym declaration

中文翻译:

• 存在‘a’的冲突定义
绑定位置::1:21
:1:23
• 位于模式同义词声明中

错误原因

Haskell定义模式同义词时,左侧声明的变量和右侧模式里的绑定变量不能重名。你写的代码里,左边声明了a,右边元组里的两个a会被当作全新的绑定变量,和左边的a产生命名冲突,因此编译器报错。

正确写法

  • 若只需要用该模式做匹配(单向模式),修改为:
pattern Double a <- (a,a)
  • 若需要双向模式(既能匹配又能构造值),需启用对应扩展,写法如下:
{-# LANGUAGE PatternSynonyms, BidirectionalPatterns #-}
pattern Double a = (a,a) <- (a,a)

或者用where子句形式(需启用PatternSynonyms):

{-# LANGUAGE PatternSynonyms #-}
pattern Double a <- (a,a) where
  Double a = (a,a)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:42:40