haskell中的typeclass和类型系统

本文探讨了Haskell中的Typeclass关系,包括它们如何相互派生、等价,以及标准库未定义的Typeclass。同时,阐述了Typeclass、实例和定律的概念,并通过图形直观展示了Functor、Applicative和Monad之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本typeclass 之间的关系

其中实线箭头表示派生,实线双箭头表示等价,虚线箭头表示其他的含义(作者没说具体是什么),灰色框表示标准库未定义的typeclass。

2.typeclass,instances and laws

----------------------------------------写在typeclass之前---------------------------------------------------
--typeclass是带参数的类型构造方式的一种抽象机制,
--laws是使用该抽象的准则,instance为具象,
--函数声明具体指出了函数实现和数据类型的基本组合方式
--这些组合方式是haskell提供的最基本功能,是组成Haskell所有语法的基石
--更基本的操作需要了解编程语言的设计原理以及lambda表达式
--
--haskell中包括以下几类名字:变量名,类型名,类型变量(参数类型),类型构造子,类型类
--变量名:x,y,z... (不用多说,都懂)
--类型名:Int,Float,...(元素(变量)的具体类型,同时是值构造子)
--类型变量:a,b,c...(类型名参数化,指代的仍为个体)
--类型构造子:Enum,[],(,)...(实际上是集合类型构造子,集合的元素类型由具体类型或者类型变量指出)
--类型类:Functor,Monad... (是上述集合的类型抽象,一个类型类对应一种集合类型,该集合必须实现类型类制定的函数,据说遵守规则好像是靠程序员自觉?)
------------------------------------------------------------------------------------------------------------
--在typeclassopedia原文中类型构造子为小写f m等,为方便理解改成了大写
-- **********************************************
--Functor:
    class Functor F where
    --F为类型构造子,a,b为类型参数, F a为具体类型,下同
    fmap :: (a -> b) -> F a -> F b
    --在源代码中看到用了forall来实现fmap,forall的意义?(在hayoo中没有搜到相关的函数)
--laws:
    fmap id = id
    fmap (g . h) = fmap g . fmap h
--instance:
    class Functor F => Pointed F wh
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值