类型" a"之间有什么区别?并键入" t"在Haskell类型签名?

时间:2017-09-14 14:07:24

标签: haskell type-inference

两种类型之间有什么区别" a"和" t"在Haskell类型签名中或它只是一个不同的名称,如类型" a"并输入" b"?

https://www.haskell.org/tutorial/goodies.html类型[a]中的

定义如下:

  

[a]是由每种类型a组成的类型系列   列表的。整数列表(例如[1,2,3]),字符列表   ([' a',' b'' c']),甚至整数列表等列表都是   这个家庭的成员。 (但请注意,[2,' b']无效   例如,因为没有单一类型同时包含2和' b'。)

这个定义也适用于类型" t" ?

一个例子可能是:

foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
  app :: [t] -> t -> [t]

1 个答案:

答案 0 :(得分:2)

在Haskell类型定义中,类型名称始终以大写字母开头,而类型变量始终以小写字母开头。这些通常称为ab,依此类推,但也可以称为fmt,等等。

通常,字母表开头的字母用于无界类型变量,而您经常会看到更多特定的类型变量,用fmt表示,等等上。

在特定的例子中

foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b

t具体表示为Foldable类型的实例。 t a表示任何Foldable'容器'包含a类型的值。

当你看另一个例子时

app :: [t] -> t -> [t]

如果[a] -> a -> [a]是一个独立的'那么它可能会说app。功能。另一方面,如果app属于类型类,则该类型类定义可以包含更具体的t定义。