Haskell求和数据类型‘多重声明’报错的解决方案咨询
关于GHC中重复构造函数名的问题
目前GHC没有任何扩展支持在不同数据类型中使用完全同名的构造函数,你给出的代码:
data X = A | B | C data Y = A | B | C
不管开启什么GHC扩展,都会触发多重声明错误,这个限制目前无法通过扩展绕过。
你只能采用常规方案避免命名冲突,常见的两种方式:
- 给构造函数添加所属类型的前缀,比如:
data X = XA | XB | XC data Y = YA | YB | YC - 将不同的数据类型放在独立模块中,使用时通过模块限定符引用构造函数(比如
X.A、Y.A),这样构造函数名可以保持一致,但引用时必须明确来源模块。
注意:GHC的DuplicateRecordFields等扩展仅支持同名记录字段,和构造函数重名是完全不同的场景,不适用于你的需求。
内容的提问来源于stack exchange,提问作者user1002430
相关产品推荐
相关产品推荐

