什么是 [a] 作为哈斯克尔中的类型



这个问题是关于Haskell编程语言的类型。

当我打字时

:t []

我得到的回报是:

[] :: [a]

什么是[a]

这样重写可能会让事情更清楚:

[] :: forall a. [a]

因此,由于它不包含任何值,Haskell无法决定类型并将其保持打开状态。但是,如果在类型化表达式中使用它,例如

x = []
f :: [Int] -> [Int]
f l = l
y = f x

它会自动解析为 [Int] ,因为它用作此类型。

这是一个占位符。这基本上意味着任何类型的都可以去那里。换句话说,如果你有一个函数

someFunc :: [Int] -> ()

你可以[]传递给它,因为[][a]的,这将匹配[Int](通过将a占位符替换为具体的Int类型)。

现在,如果您查看,例如,id,您会发现它具有a -> a的类型。这意味着它是一个函数,它接受任何类型的对象,并返回相同类型的对象。有趣的是,由于该函数对给定的对象一无所知(因为它对类型没有约束),因此您知道此函数必须执行以下两项操作之一:

  1. 返回输入对象,或
  2. 返回⊥(底部)。