仿函数的数学定义以下函数
设 C 和 D 为集合,从 C 至 D 有一映射F 将每一个对象 X ∈ C 映射至一对象 F(X) ∈ D 上, 将每一个态射 f:X ⟶ Y ∈ C 映射至一态射 F(f):F(X) ⟶ F(Y) ∈ D 上,
Haskell的仿函数是一个class,其中主要的抽象函数是fmapspa
fmap :: (a -> b) -> f a -> f b
Haskell在Functor的注释中提到了Haskell仿函数的两条规则。code
第一条是,若是咱们使用函数id做为映射,那么咱们的返回结果应当是做为参数仿函数orm
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)