有没有办法通过用另一种类型包装类型来制作混合类型列表?
例如,如果我有两种数据类型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]
有办法做到这一点吗?我还在考虑是否可以使用类型类。
答案 0 :(得分:5)
是。你可以使用这样的东西:
data Pet = ItsACat Cat | ItsADog Dog
pets = [ItsACat Cat, ItsADog Dog]