元组内部的元组类型不同还是相似?

时间:2018-09-19 11:56:05

标签: haskell

在键入方面,[([(True, False),(True, False)])]是否等于[((True, False),(True, False))]

1 个答案:

答案 0 :(得分:6)

。我们可以在GHCi中查询类型,并获得:

Prelude> :t [([(True, False),(True, False)])]
[([(True, False),(True, False)])] :: [[(Bool, Bool)]]
Prelude> :t [((True, False),(True, False))]
[((True, False),(True, False))] :: [((Bool, Bool), (Bool, Bool))]

因此,第一个表达式是Bool的2元组列表的列表;后者是Bool的2元组2元组的列表。

列表不是元组。在Haskell列表中,所有元素的类型均为 same ,此外,列表的 length 并不固定为 compile 时间。

另一方面,元组具有 fixed 固定值(元素数量),并且元素的类型可以变化。

我们还可以在语法中看到:(True, False)是一个带有两个布尔值的2元组,但是在第一个变体中,我们将此表达式放在 square 方括号之间两次(因此list),而在后者中,它在 round 括号之间(因此有一个元组,或将表达式“分组”的括号)。