在Haskell中[a]是什么类型的?
这个问题是关于Haskell编程语言中的类型的 我打字的时候在Haskell中[a]是什么类型的?,haskell,types,Haskell,Types,这个问题是关于Haskell编程语言中的类型的 我打字的时候 :t [] 我得到的回报是: [] :: [a] 什么是[a]?它是一个占位符。这基本上意味着任何类型的人都可以去那里。换句话说,如果你有一个函数 someFunc :: [Int] -> () 您可以将[]传递给它,因为[]是[a],它将通过用具体的Int类型替换a占位符来匹配[Int] 现在如果你看,比如说,id,你会发现它的类型是a->a。这意味着它是一个函数,接受任何类型的对象,并返回相同类型的对象。有趣的是,由于
:t []
我得到的回报是:
[] :: [a]
什么是[a]?它是一个占位符。这基本上意味着任何类型的人都可以去那里。换句话说,如果你有一个函数
someFunc :: [Int] -> ()
您可以将[]传递给它,因为[]是[a],它将通过用具体的Int类型替换a占位符来匹配[Int]
现在如果你看,比如说,id,你会发现它的类型是a->a。这意味着它是一个函数,接受任何类型的对象,并返回相同类型的对象。有趣的是,由于函数对给定的对象一无所知,因为它对类型没有约束,所以您知道该函数必须执行以下两项操作之一:
返回输入对象,或
回来⊥ .
这样重写可能会让事情更清楚:
[] :: forall a. [a]
因此,由于它不包含任何值,haskell无法决定类型并将其保留为打开状态。但是,如果在类型化表达式中使用它,则
x = []
f :: [Int] -> [Int]
f l = l
y = f x
它会自动解析为[Int],因为它被用作此类型。a称为类型variable@Riccardo我知道。我是否在某个地方错误地表达了自己?一点也不,您只是忘记了指定a的名称:。。。[a]中的a是一个占位符,也称为类型变量。。。[]的类型为[a],将与[Int]匹配。对于新手来说,不精确的书写可能会让人非常困惑