在键入方面,[([(True, False),(True, False)])]
是否等于[((True, False),(True, False))]
?
答案 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 括号之间(因此有一个元组,或将表达式“分组”的括号)。