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
相关产品推荐
相关产品推荐

