Rah*_*hat 3 haskell type-inference
当我输入:type [(True,[]),(False, [['a']])] , "[(Bool,[[char]])]"ghci 时,它会输出[ (Bool , [ [char] ] )]. Haskell 的类型推断怎么可能将空列表和 [[char]] 视为相同的。
Haskell 知道True和False是Bools,而且我们知道列表的所有元素都具有相同的类型。
因此,我们正在寻找一种类型[(True,[]),(False, [['a']])]。我们看到,这是一个2元组作为第一元素的元素Bool,并作为第二个项目有一个空的列表,以便有型[] :: [a]有a,在那个时候,未知。
现在,如果我们查看第二项,并查看(False, [['a']]). 因此,这是一个 2 元组,False作为第一项,[['a']]作为第二项。'a'is的类型Char,因此['a']有 type [Char],并且[['a']]有 type [[Char]]。由于列表的元素应该具有相同的类型,因此我们推导出a第一项的类型参数是a ~ [Char],因此外部列表具有类型[(True,[]),(False, [['a']])] :: [(Bool, [[Char]])]。