Haskell 元组中的元组类型不同还是相似?

Haskell 元组中的元组类型不同还是相似?,haskell,Haskell,就打字而言,[([(真,假),(真,假)]]是否等同于[((真,假),(真,假))] 否。我们可以在GHCi中查询类型,并获得: Prelude> :t [([(True, False),(True, False)])] [([(True, False),(True, False)])] :: [[(Bool, Bool)]] Prelude> :t [((True, False),(True, False))] [((True, False),(True, False))] ::

就打字而言,
[([(真,假),(真,假)]]
是否等同于
[((真,假),(真,假))]

。我们可以在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
s的2元组组成的列表;后者是
Bool
s的2元组的2元组列表

列表不是元组。在列表中的Haskell中,所有元素都具有相同的类型,而且列表的长度在编译时不是固定的

另一方面,元组具有固定的arity(元素的数量),元素的类型可以不同


我们还可以在语法中看到:
(True,False)
是一个包含两个布尔值的二元组,但在第一个变体中,我们将此表达式两次放在方括号之间(因此是一个列表),而在后一个变体中,它放在圆括号之间(因此是一个元组,或将表达式“分组”的括号)。。我们可以在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
s的2元组组成的列表;后者是
Bool
s的2元组的2元组列表

列表不是元组。在列表中的Haskell中,所有元素都具有相同的类型,而且列表的长度在编译时不是固定的

另一方面,元组具有固定的arity(元素的数量),元素的类型可以不同

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