鉴于这两种总和类型:
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
数据类型,其中包含Foo
或Bar
?
答案 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)
。