当我在ghci中键入:type [(True,[]),(False, [['a']])] , "[(Bool,[[char]])]"
时,它会输出[ (Bool , [ [char] ] )]
。 Haskell的类型推断如何将空列表和[[char]]视为相同。
答案 0 :(得分:9)
Haskell知道True
和False
是Bool
,此外,我们知道列表中的所有元素都具有相同的类型。
因此,我们正在寻找类型[(True,[]),(False, [['a']])]
。我们看到该元素是一个2元组,第一个元素为Bool
,第二个元素为空列表,因此类型为[] :: [a]
和a
,位于那个时候,未知。
现在,如果我们看第二项,并看到(False, [['a']])
。因此,这是一个2元组,其中False
作为第一项,[['a']]
作为第二项。 'a'
的类型为Char
,因此['a']
的类型为[Char]
,而[['a']]
的类型为[[Char]]
。由于列表的元素应具有相同的类型,因此我们得出第一项的a
类型参数为a ~ [Char]
,因此外部列表的类型为[(True,[]),(False, [['a']])] :: [(Bool, [[Char]])]
。 / p>