Haskell 理解(1+)

Haskell 理解(1+),haskell,Haskell,1+的类型如下所示: Prelude> :t (1+) (1+) :: Num a => a -> a 将此函数读取为以下内容的正确方法: 1+接受一个Num并返回一个类型为a->a的函数。表示 +1是从a到a的函数,其中a必须是Num typeclass的实例 有关更多信息,请参见。否,Num a是一个类约束,由不同的箭头=>表示 +1是从a到a的函数,其中a必须是Num typeclass的实例 有关更多信息,请参见。否,在Haskell中,=>前面的部分表示类约束,参数

1+的类型如下所示:

Prelude> :t (1+)
(1+) :: Num a => a -> a
将此函数读取为以下内容的正确方法:

1+接受一个Num并返回一个类型为a->a的函数。

<1+接受一个a并返回一个a,限制a必须是Num的实例。

1+接受一个a并返回一个a,限制a必须是Num的实例。

否,Num a是一个类约束,由不同的箭头=>表示

+1是从a到a的函数,其中a必须是Num typeclass的实例

有关更多信息,请参见。

否,Num a是一个类约束,由不同的箭头=>表示

+1是从a到a的函数,其中a必须是Num typeclass的实例


有关更多信息,请参见。

否,在Haskell中,=>前面的部分表示类约束,参数必须是该约束的实例。所以

(1+) :: Num a => a -> a 
这意味着1+是一个函数,它接受一个参数a并返回一个参数a,其中参数a必须是类constraint Num的实例


在这里,您可以看到Num类约束的完整定义:

否,在Haskell中,=>前面的部分表示参数必须作为其实例的类约束。所以

(1+) :: Num a => a -> a 
这意味着1+是一个函数,它接受一个参数a并返回一个参数a,其中参数a必须是类constraint Num的实例


在这里您可以看到Num类约束的完整定义:

No。1+的类型是a->a,其中必须有Num a的实例。所以它可以是Int->Int或Integer->Integer,因为实例Num Int和Num Integer是由前奏定义的,但是1+不能是String->String,除非您定义了实例Num String。实际上您可能是对的。。。Haskell有类型类Num就是其中之一。它们是使用所谓的字典实现的。基本上,具有一些约束(如Num a=>)的函数将成为具有额外字典参数的函数,这些字典参数是与约束中的类相关的字典,它们带来了各种操作的实现。在本例中,1+相当于\numDict x->+numDict 1 x,其中+也包含一个额外的参数。但在你学到更多haskell之前,先忘掉这一点。Num字典根本不是一个数字,它更像是一个工具箱,它允许您将值用作数字。否。1+的类型是a->a,其中必须有Num a的实例。所以它可以是Int->Int或Integer->Integer,因为实例Num Int和Num Integer是由前奏定义的,但是1+不能是String->String,除非您定义了实例Num String。实际上您可能是对的。。。Haskell有类型类Num就是其中之一。它们是使用所谓的字典实现的。基本上,具有一些约束(如Num a=>)的函数将成为具有额外字典参数的函数,这些字典参数是与约束中的类相关的字典,它们带来了各种操作的实现。在本例中,1+相当于\numDict x->+numDict 1 x,其中+也包含一个额外的参数。但在你学到更多haskell之前,先忘掉这一点。Num字典根本不是一个数字,它更像是一个工具箱,它允许您将值用作数字。