什么是`-&燃气轮机;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]
,除非它更一般。