什么是`-&燃气轮机;t a->;…`Haskell中的类型签名是什么意思?

什么是`-&燃气轮机;t a->;…`Haskell中的类型签名是什么意思?,haskell,types,Haskell,Types,在函数all和any的签名中,我看到: Prelude> :t all all :: Foldable t => (a -> Bool) -> t a -> Bool Prelude> :t any any :: Foldable t => (a -> Bool) -> t a -> Bool 但是,…->是什么意思 t和a不是一个类型变量吗?如果是这样的话,两种类型变量的并置在Haskell中意味着什么 t和a不是都是类型变量吗?

在函数
all
any
的签名中,我看到:

Prelude> :t all 
all :: Foldable t => (a -> Bool) -> t a -> Bool
Prelude> :t any
any :: Foldable t => (a -> Bool) -> t a -> Bool
但是,
…->是什么意思

t
a
不是一个类型变量吗?如果是这样的话,两种类型变量的并置在Haskell中意味着什么

t和a不是都是类型变量吗?如果是这样的话,两种类型变量的并置在Haskell中意味着什么

与数据构造函数可以获取参数(例如
Just
)一样,类型构造函数也可以获取参数,然后这些参数就是类型。例如,
Maybe
类型构造函数接受一个类型参数(例如
Int
),然后是一个类型
Maybe Int

例如,可以使用列表
[]
来存储元素,但仍有一个类型参数需要解析:列表将存储的对象的类型<代码>[]Int
[Int]
Int
的列表

现在可折叠的类型是可以折叠的类型。例如,列表
[]
是一个可折叠的
列表(请注意,我们使用的是
[]
,而不是
[a]
[Int]
),也可以是
列表,或者是
树。大多数元素的“集合”是可折叠的,尽管不是集合的类型可以是可折叠的,反之亦然

和是可在可折叠上操作的功能。这样做的好处是,我们可以编写
all
any
来操作
a
的列表(因此
[a]
),但是
也可以使用
或者a
:您可以将
或者
视为一种类型,它要么是一个不包含任何元素(
没有任何内容
)的集合,要么就是一个元素(
只有x
x
元素)。例如,我们可以编写:

Prelude> all id Nothing
True
Prelude> all id (Just True)
True
Prelude> all id (Just False)
False
Prelude> all id []
True
Prelude> all id [True]
True
Prelude> all id [False]
False
Prelude> all id [False, True]
False
Prelude> all id [True, True]
True

因此,
all
可以在列表上工作,
可能是
s,但也有很多其他类型。

t
是一个带有参数的类型构造函数。例如
可能是
,如果
a
那么类型就是a
可能是Int
@WillemVanOnsem,这很有意义。谢谢你的回答。最著名的可折叠的
t
[]
。只要假装
ta
[a]
,除非它更一般。