使用导入的模块创建包含类型的数据类型

时间:2014-04-27 14:27:44

标签: haskell

假设我们有一个模块A和一个模块B,其中声明了类型A和B. 在Super模块中,我们想说Type Super是A或B,如下面的代码所示:

-- module A
data A = A String

-- module B
data B = B Int

-- module Super
data Super = A.A
           | B.B

但是这不起作用,因为我们不能在数据构造函数中使用完全限定数据类型(错误是:“绑定位置中的合格名称”)如果我们没有像下面那样输入完整限定名,则类型A和B是不是来自模块A和B

-- module Super
data Super = A
           | B

到目前为止,我的解决方案就是这样做

-- module Super
data Super = A A.A
           | B B.B

有没有更好的方法来实现这一目标?我不确定是否必须使用类型

P.S: 我的目标是拥有Super

类型的列表
let mySuperList = [ B, A ] :: [Super]

1 个答案:

答案 0 :(得分:4)

let mySuperList = [ Left B, Right A ] :: [Either B A]

如果你可以在没有过度增加名字的情况下离开,从长远来看,你可能会发现它更强大。