包含两种求和类型的数据类型?
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
数据类型,其中包含 Foo
或 Bar
?
是的,你确实可以!
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)
。
给定这两种总和类型:
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
数据类型,其中包含 Foo
或 Bar
?
是的,你确实可以!
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)
。