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

Haskell中重复构造函数报错:为何不能重复使用Orange?

为什么Haskell里不能重复使用Orange作为构造器?

在Haskell中,数据类型的构造器(比如Pear、Orange这类竖线分隔的名字)是全局可见的命名实体,不属于某个数据类型的私有命名空间。这意味着不管你在Fruit还是Colour里定义,Orange这个名字只能被定义一次——编译器会把所有同名的构造器当成同一个东西,重复定义自然会触发冲突错误。

举个直白的例子:如果允许重复定义,之后你写Orange的时候,编译器根本没法判断你指的是水果里的橙子,还是颜色里的橙色,这种歧义是Haskell严格的类型系统不允许的。

解决这个问题的方法很直接,给重复的构造器换个唯一的名字就行,比如给它们加上对应类型的前缀:

data Fruit  = Pear | FruitOrange | Apple | Banana
data Colour = Red | ColourOrange | Yellow | Green

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:50:20