我有以下数据定义:
data Listr a = Nil | Cons a (Listr a) deriving Show
data Listl a = Nil | Cons (Listl a) a deriving Show
Haskell抱怨Multiple declarations of ‘Cons’
。 (它也会抱怨Nil)。
这不是Haskell支持的吗?如何宣布上述内容?
我当然可以使用:
data Listr a = Nill | Consl a (Listr a) deriving Show
data Listl a = Nilr | Consr (Listl a) a deriving Show
但我更喜欢第一个。
答案 0 :(得分:3)
Haskell不支持此功能。如果你必须有两个带有同名构造函数的类型,你可以将它们放在不同的模块中。我强烈建议您不要这样做,因为除非您可靠地限定任何含糊不清的名称,即使它们在技术上不是以模棱两可的方式导入,否则它可能会非常混乱。
我很喜欢定义
data Tsil a = Lin | Snoc (Tsil a) a
有时候;你可能想偷我的命名。