Haskell编程思想之一 初识类型系统

一、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)
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值