0

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

当我输入

:t []

我得到的回报是:

[] :: [a]

是什么[a]

4

2 回答 2

12

像这样重写它可能会使事情更清楚:

[] :: forall a. [a]

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

x = []

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

y = f x

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

于 2012-04-27T06:26:21.233 回答
5

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

someFunc :: [Int] -> ()

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

现在如果你看一下,说,id你会发现它的类型是a -> a。这意味着它是一个接受任何类型对象并返回相同类型对象的函数。有趣的是,因为函数对它给出的对象一无所知(因为它对类型没有限制),所以你知道这个函数必须做两件事之一:

  1. 返回输入对象,或
  2. 返回⊥(底部)。
于 2012-04-27T06:20:54.077 回答