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

use*_*074 1 haskell

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

例如,如果我有两种数据类型,Cat并且Dog,我可以使用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]
Run Code Online (Sandbox Code Playgroud)

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

Ola*_*the 5

是.你会用这样的东西:

data Pet = ItsACat Cat | ItsADog Dog

pets = [ItsACat Cat, ItsADog Dog]
Run Code Online (Sandbox Code Playgroud)