在Haskell中使用包装器的混合类型列表

时间:2016-07-11 01:48:27

标签: haskell

有没有办法通过用另一种类型包装类型来制作混合类型列表?

例如,如果我有两种数据类型CatDog,我可以使用类似Pet包装的内容列出猫和狗的列表吗?我知道这可以使用代数数据类型完成,但我也希望其他包装器可用,例如Animal

我想要使用的基本方法如下:

data Cat = Cat
data Dog = Dog
data Cow = Cow

data Pet a = Pet a
data Animal a = Animal a

pets = [Pet Cat, Pet Dog]
animals = [Animal Cat, Animal Dog, Animal Cow]

有办法做到这一点吗?我还在考虑是否可以使用类型类。

1 个答案:

答案 0 :(得分:5)

是。你可以使用这样的东西:

data Pet = ItsACat Cat | ItsADog Dog

pets = [ItsACat Cat, ItsADog Dog]