【发布时间】:2019-12-24 18:31:53
【问题描述】:
当我在 ghci 中输入 :type [(True,[]),(False, [['a']])] , "[(Bool,[[char]])]" 时,它会输出 [ (Bool , [ [char] ] )]。 Haskell 的类型推断怎么可能将空列表和 [[char]] 视为相同。
【问题讨论】:
-
空列表的类型为
[] :: [a],因为另一个列表是[['a']],它知道a ~ [Char]。 -
它绝对不会将空列表和
[[Char]]视为相同。但是,它将空列表视为[[Char]]类型的值——为什么不应该这样做? -
[]又名Empty是一种 重载类型构造函数,就像Nothing的Maybe a一样。它可以属于携带类型变量的多种类型。