两种类型之间有什么区别" 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]
答案 0 :(得分:2)
在Haskell类型定义中,类型名称始终以大写字母开头,而类型变量始终以小写字母开头。这些通常称为a
,b
,依此类推,但也可以称为f
,m
,t
,等等。
通常,字母表开头的字母用于无界类型变量,而您经常会看到更多特定的类型变量,用f
,m
,t
表示,等等上。
在特定的例子中
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
定义。