2016-01-24 101 views

回答

7

1 :: Num a => a意味着1有一些类型a,其中aNum类型类的一个实例。请注意,Num不是一个类型,而是一个类型类型,它描述了各种类型的通用属性。例如,类型类型Num描述的是数字类型,因此支持基本算术。本地机器整数类型IntNum的一个实例,如同任意大小的Integer,浮点类型Double,甚至有理数类型Rational一样。

6

a => a并不意味着什么。完整的短语是Num a => a。这意味着“a”是Num类型类的一个实例。

你也可以把它看作(Num a) => a。它提供了一个上下文来说明a是数字。
然而,它不是类型a;它只是说a应该在Num类型
类型类有点像面向对象编程中的接口,因为它们定义了某些行为,而没有详细定义a。请注意,->=>之间有所不同。第一个用于功能签名;第二个用于显示类型类。

+0

我没有得到它。 “a”的类型是“Num”。但为什么我们需要说'=> a'呢? – Finkelson

+0

对我而言'Num a => a'就是这样的:'a'的类型是'Num',它是'a'。这是模糊的。 – Finkelson

+5

'数字a'告诉你一些关于'a'的信息。 'Num'是一个类型类,不是一个类型。有点像面向对象编程中的接口,它定义了'a'应该满足的一些条件,而没有详细定义'a'。 –

2

打字1 :: Num a => a意思是“1a类型的,对于所有类型的a在类型类Num”。更确切地说,这意味着“1是任何数字类型”。

由于这种类型的,你可以通过1到需要的任何数字类型的任何功能,如IntDouble

扩展您的例子一点,我们也有[1,2,3] :: Num a => [a]。这意味着“[1,2,3]是类型a的值的列表,对于类型Num中的所有类型a”。换句话说,“[1,2,3]是任何数字类型的值的列表”。

相关问题