在Haskell中创建不同类型对象的列表?
我必须创建一个函数来接收这个 使用列表参数的步骤 检查[c,(x,y,z),c,(x,y,z),…,c,(x,y,z)] 其中c是一个整数,(x,y,z)是一个元组在Haskell中创建不同类型对象的列表?,haskell,Haskell,我必须创建一个函数来接收这个 使用列表参数的步骤 检查[c,(x,y,z),c,(x,y,z),…,c,(x,y,z)] 其中c是一个整数,(x,y,z)是一个元组 但是我不知道如何实现这个功能,这是不可能的。列表只能包含单一类型的值。您可以创建一个[任意一个整数(整数,整数,整数)],在这种情况下,您的列表看起来像[左c1,右(x1,y1,z1),左c2,右(x2,y2,z2)],但这不是很令人满意,可能很难使用,并且无法由类型系统强制执行。请记住,我们越是允许类型检查器强制执行,就越不可能遇
但是我不知道如何实现这个功能,这是不可能的。列表只能包含单一类型的值。您可以创建一个
[任意一个整数(整数,整数,整数)]
,在这种情况下,您的列表看起来像[左c1,右(x1,y1,z1),左c2,右(x2,y2,z2)]
,但这不是很令人满意,可能很难使用,并且无法由类型系统强制执行。请记住,我们越是允许类型检查器强制执行,就越不可能遇到意外值
相反,您应该考虑将不匹配类型括成一对列表:<代码> [(整数,整数,整数)] /代码>,这会使列表看起来像<代码> [(c1,(x1,y1,Z1)],(c2,(x2,y2,z 2)] < /p> < /p>如果每个<代码> c>代码>后面是一个三元组,为什么不<代码> [(c,(x,y,z)),(c,(x,y,z)),…]?你不可能真的有这样的异构列表。如果它们成对出现,则使用嵌套元组,或者使用有区别的并集类型,如
other Integer YourTuple
,鉴于您无法创建这样的列表,您似乎不太可能必须创建接收它们的函数。(这看起来像是一张照片。)