Prelude> :t (+)
(+) :: (Num a) => a -> a -> a
我的演讲幻灯片说
a -> a -> a
表示一个函数接受两个参数并返回一个,并且它们都是同一类型。参数中的哪两个是返回值?
谢谢你。
您必须在这里掌握一些级别:
a -> b -> c
是一种取a
一b
和产生一的函数c
好吧,还有更多:
a -> b -> c
真的是
a -> (b -> c)
是一个取一个a
并产生另一个函数的函数,取一个b
并产生一个c
f :: (Num a) => a -> a -> a
添加一个约束a
(在这里Num
-这意味着a
应该是一个数字-a
是Num
类型类的实例)
因此,您得到一个函数,该函数采用,a
并产生一个函数,该函数采用另一个a
并返回a
,并且a
必须是的实例Num
因此f
,要输入的每个输入必须具有相同的数字类型:
f 1 2
还可以f 'a' 'b'
是不正常f (1::Int) (2::Int)
还可以f (1::Float) (2::Float)
还可以f (1::Int) (2::Float)
是不正常(+)
)你必须了解这里的最后一件事是,(+)
被定义为的一部分,Num
所以有不同的 +
基础上,使用的类型......而同样如此数量的文字一样0
,1
...这就是为什么0
可以是一个Float
或一个Int
或任何类型的实例Num
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句