Haskell的仿函数

仿函数的数学定义如下

设 C 和 D 为集合,从 C 至 D 有一映射F
将每个对象 X ∈ C 映射至一对象 F(X) ∈ D 上,
将每个态射 f:X ⟶ Y ∈ C 映射至一态射 F(f):F(X) ⟶ F(Y) ∈ D 上,

Haskell的仿函数是一个class,其中主要的抽象函数是fmap

fmap        :: (a -> b) -> f a -> f b

Haskell在Functor的注释中提到了Haskell仿函数的两条规则。

第一条是,如果我们使用函数id作为映射,那么我们的返回结果应当是作为参数仿函数

Haskell的表达方式如下
fmap id a = a

数学表达方式如下
对任何对象 X ∈ C,恒有 F(id(x)) = id(F(x))

第二条是,使用组合函数作为映射,得到的结果,应当保证同组合函数中的函数按照顺序作为映射函数的结果相同。

Haskell的表达式如下
fmap (f . g) = fmap f . fmap g
或者
fmap (f . g) F = fmap f (fmap g F)

数学表达方式如下
F(f.g) = F(g).F(f)


转载于:https://my.oschina.net/u/236698/blog/411604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值