数据类型包含两种总和类型?

时间:2016-04-22 02:45:27

标签: idris

鉴于这两种总和类型:

data Foo = A Int | B String
data Bar = C Int | D String

我想定义一个返回Either (Foo or Bar) String的函数。

所以,我试图做出:

data Higher = Foo | Bar

但它未能编译:

*ADT> :r
Type checking ./ADT.idr
ADT.idr:3:6:Main.Foo is already defined
ADT.idr:4:6:Main.Bar is already defined

如何创建Higher数据类型,其中包含FooBar

1 个答案:

答案 0 :(得分:3)

是的你确实可以!

data Foo = A Int | B String
data Bar = C Int | D String

data Higher : Type where
    InjFoo : Foo -> Higher
    InjBar : Bar -> Higher

现在,您可以InjFoo (B "Hello")InjBar (C 5)