使用相同模式

时间:2018-01-23 00:45:23

标签: haskell

我有以下数据定义:

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

但我更喜欢第一个。

1 个答案:

答案 0 :(得分:3)

Haskell不支持此功能。如果你必须有两个带有同名构造函数的类型,你可以将它们放在不同的模块中。我强烈建议您不要这样做,因为除非您可靠地限定任何含糊不清的名称,即使它们在技术上不是以模棱两可的方式导入,否则它可能会非常混乱。

我很喜欢定义

data Tsil a = Lin | Snoc (Tsil a) a
有时候;你可能想偷我的命名。