这个问题是关于 Haskell 编程语言中的类型。
当我输入
:t []
我得到的回报是:
[] :: [a]
是什么[a]
?
像这样重写它可能会使事情更清楚:
[] :: forall a. [a]
因此,由于它不包含任何值,haskell 无法确定类型并使其保持打开状态。但是,如果您在类型表达式中使用它,例如
x = []
f :: [Int] -> [Int]
f l = l
y = f x
它会自动解析为[Int]
,因为它被用作这种类型。
这是一个占位符。这基本上意味着任何类型都可以去那里。换句话说,如果你有一个函数
someFunc :: [Int] -> ()
您可以传递[]
给它,因为[]
is[a]
将匹配[Int]
(通过将a
占位符替换为具体Int
类型)。
现在如果你看一下,说,id
你会发现它的类型是a -> a
。这意味着它是一个接受任何类型对象并返回相同类型对象的函数。有趣的是,因为函数对它给出的对象一无所知(因为它对类型没有限制),所以你知道这个函数必须做两件事之一: