首页 > 解决方案 > 为什么是 [ ( True , [ ] ) , ( False , [ ['a'] ] ) ] , "[ (Bool , [ [char] ] )]" 的类型?

问题描述

当我输入:type [(True,[]),(False, [['a']])] , "[(Bool,[[char]])]"ghci 时,它会输出[ (Bool , [ [char] ] )]。Haskell 的类型推断怎么可能将空列表和 [[char]] 视为相同。

标签: haskelltype-inference

解决方案


Haskell 知道TrueandFalseBools,而且我们知道列表的所有元素都具有相同的类型。

因此,我们正在寻找一种类型[(True,[]),(False, [['a']])]。我们看到元素是一个二元组,第一个元素是 a Bool,第二个元素是一个空列表,因此它的类型[] :: [a]a,当时未知。

现在,如果我们看第二个项目,然后看(False, [['a']]). 因此,这是一个 2 元组,False作为第一项,[['a']]作为第二项。的类型'a'Char,因此['a']有类型[Char],并且[['a']]有类型[[Char]]。由于列表的元素应该具有相同的类型,因此我们得出a第一项的类型参数是a ~ [Char],因此外部列表具有类型[(True,[]),(False, [['a']])] :: [(Bool, [[Char]])]


推荐阅读