haskell - Haskell 中的类型签名中的 `... -> t a ->...` 是什么意思?

标签 haskell types

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

Prelude> :t all 
all :: Foldable t => (a -> Bool) -> t a -> Bool
Prelude> :t any
any :: Foldable t => (a -> Bool) -> t a -> Bool

但是,... -> t a ->... 是什么意思?

ta 不都是类型变量吗?如果是这样,两个类型变量的并置在 Haskell 中意味着什么?

最佳答案

Isn't both t and a a type variable? if so, what does the juxtapositions of two type variable mean in Haskell?

就像data构造函数可以接受参数一样(例如Just),type构造函数也可以接受参数同样,这些参数也是类型。例如,Maybe 类型构造函数采用类型参数(例如 Int),然后是一个类型 Maybe Int

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

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

all :: Foldable t => (a -> Bool) -> t a -> Boolany :: Foldable t => (a -> Bool) -> t a -> Bool是可以在 Foldable 上运行的函数。因此,优点是我们可以编写 allany 来对 a 列表进行操作(因此 [a]),但也可以使用 Maybe a:您可以将 Maybe 视为一种类型,该类型是包含的集合元素(Nothing),或恰好一个元素(Just x with x the element)。例如我们可以这样写:

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 可以在列表上工作,也许,但也可以在许多其他类型上工作。

关于haskell - Haskell 中的类型签名中的 `... -> t a ->...` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51581150/

相关文章:

haskell - Cabal 安装失败 OSX

haskell - 为什么这个 Haskell 代码使用fundeps 进行类型检查,但对类型族产生不可触碰的错误?

haskell - 在 Haskell 中,求实数根的最直接方法是什么?

c++ - 异常处理的顺序重要吗?

haskell - 功能队列类型

c++ - 为什么除了 char 之外的内置类型 sizeof 在 C 和 C++ 中依赖于编译器?

list - Haskell - 如何返回网格中所有元素行的列表

haskell - 在 Haskell 中,种类可以是星序列以外的任何东西吗?

typescript - TypeScript 中扩展接口(interface)和相交接口(interface)的区别?

C++:自定义数据类型 - 类型转换和 union 问题