一、classType的函数 和普通函数有区别吗?
初步来看,没有什么本质区别,普通函数描述的输入到输出的关系,输入有基本的类型,有标准的扩展类型,这些扩展的类型许多也属于classType定义出来的,然后如果外加上有些参数本身就是函数,作为参数的函数它所需要的参数,又有可能与它外层的函数有参数上的联系,这样就造成了函数和参数函数,以及此函数的普通参数类型之前的复杂关系。
而classType的函数,作为此Type的一个约束存在,同时此Type a,又能够在作用范围内被此函数作为参数使用。建立了两者的关系。应该是说为了进一步共用和抽象吧,把通用的Type,以及函数抽象出来,避免过多定义。
二、变量、类型变量
haskell里面只有关系(函数)存在,没有变量存在,对于任何个名字:
a = b * c + 2;
其中 a, b ,c 只是对另外一些事物的指代,不可对其操作,改变,基本都是数学里面的函数定义:f(a) = b * c + 2;
在函数类型声明和函数参数上,a->b->a,a,b,c等代表的是一种类型,而 f a -> a, 基于抽象层次,那a是一种具体类型,f就是抽象一级的:范型
如果函数的类型签名里包含类型变量,那么就表示这个函数的某些参数可以是任意类型,我们称这些函数是多态的。
对于函数这样的参数来说,叫parameterized type,参数化类型。
三、基本类型、复合类型
基本类型就是Int Bool等,复合的话就是[] (),也就是list Tuple等,这些类型也可能多种独立函数和其它classType修饰。
四、data关键字:类型构造器与值构造器
data Abc = Aaa xx xx xx deriving
前面Abc叫 类型构造器 前面Aaa叫,值构造器。
类型构造器,是对类型的指代,只出现的定义中,值构造器则实现实际的代码
例如:Just Nothing都是Maybe类型构造 值构造
类型的多态,Maybe,或者叫泛型类型
data 递归定义类型
五、class关键字:classType
最后就是 typeclass ,好像没有具体的类似值构造子的项,但会有genaric的函数声明
class BasicEq a where
isEqual :: a -> a -> Bool
a称为实例类型,instance types
我理解是class BasicEq所约束的实例类型。 然后实际约束的函数,类型定义的时候,如果引用到了此instance ,需要名字一致,为:a
重要的内置classtype:
Show
Read
数值类型,使用typeclass让其支持基本函数,比如Int +
简单的typeclass能够自动派生,而不需要实现classtype的约束函数,方便
后面就是学习IO 然后三大classtype:Functor Applicative Manod
简单class:
class ClassTest a where
addonetest :: a->a
instance ClassTest Int where
addonetest a = (a + 1)
instance ClassTest Float where
addonetest a = (a + 1)
instance ClassTest Double where
addonetest a = (a + 1)
instance ClassTest Integer where
addonetest a = (a + 1)