Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell中,它指的是什么?_Haskell - Fatal编程技术网

在Haskell中,它指的是什么?

在Haskell中,它指的是什么?,haskell,Haskell,以下哪种类型是最普遍的 一, 二, 三, 四, 有人能解释为什么答案是第一个吗?拥有最通用的类型意味着什么?一直在网上搜索,没有找到任何有用的东西 在这个上下文中,第一个似乎意味着第一个实际上包括所有其他的,只是通过a和/或t的特定选择 第一类: (Num a, Foldable t) => t a -> a 表示适用于任何a和t的函数,前提是a是Num的实例,t是可折叠的实例 特别是,如果我们指定t是[]列表类型构造函数,它是Foldable的实例,而a是Int,它是Num的实例

以下哪种类型是最普遍的

一,

二,

三,

四,


有人能解释为什么答案是第一个吗?拥有最通用的类型意味着什么?一直在网上搜索,没有找到任何有用的东西

在这个上下文中,第一个似乎意味着第一个实际上包括所有其他的,只是通过a和/或t的特定选择

第一类:

(Num a, Foldable t) => t a -> a
表示适用于任何a和t的函数,前提是a是Num的实例,t是可折叠的实例

特别是,如果我们指定t是[]列表类型构造函数,它是Foldable的实例,而a是Int,它是Num的实例,那么我们得到

[Int] -> Int
正好是2号。这表明1比2更一般,因为当你有1时,你也必然有2,但不能朝相反的方向走


其他两种情况完全相同,只是他们只为a或t选择了一种特定类型,而不是像2一样选择了两种类型。

这是第一种情况,因为其他情况是第一种情况的特殊情况

2.[Int]->Int 如果我们将第一个签名中的t替换为[],将a替换为Int,则我们得到:

[] Int -> Int
这是一种更为规范的形式:

[Int] -> Int
由于[]是可折叠typeclass的实例,Int是Num typeclass的实例,因此允许我们以这种方式指定函数

3.数值a=>[a]->a 在这里,我们可以将t替换为[]以获得签名:

Num a => [a] -> a
4.可折叠的t=>t Int->Int 在这里,我们将第一个签名中的a替换为Int,从而获得:

(Foldable t) => t Int -> Int

为什么你认为它是另一个呢?提示:有多少东西在=>的左边,它们是什么意思?
[] Int -> Int
[Int] -> Int
Num a => [a] -> a
(Foldable t) => t Int -> Int