包含两种求和类型的数据类型?

Data Type Encompassing Two Sum Types?

给定这两种总和类型:

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

我想定义一个函数 returns 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

是的,你确实可以!

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)