假设我们有一个模块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]
答案 0 :(得分:4)
let mySuperList = [ Left B, Right A ] :: [Either B A]
如果你可以在没有过度增加名字的情况下离开,从长远来看,你可能会发现它更强大。