函数式编程意义下的函子:函数 f : Type u → Type v 能将一个函数映射到其内容之上。
这个 map 运算符写作 <$>,并通过 Functor 实例重载。
此 map 函数应当保持恒等函数和函数复合。换言之,对于所有项 v : f α,应有:
-
id <$> v = v -
对所有函数
h : β → γ和g : α → β,(h ∘ g) <$> v = h <$> g <$> v
所有 Functor 实例都应满足这些要求,但不要求它们_证明_这一点。可以通过 LawfulFunctor
类型类要求或提供这些证明。
假定实例合法,这一定义对应于范畴论中的函子概念, 其中所考虑的特殊范畴以类型为对象、以类型间的函数为态射。
实例构造子
Functor.mk.{u, v}
方法
map : {α β : Type u} → (α → β) → f α → f β
mapConst : {α β : Type u} → α → f β → f α
映射常值函数。
给定 a : α 和 v : f β,mapConst a v 等价于 (fun _ => a) <$> v。对某些函子,
可以更高效地实现它;其他所有函子都可使用默认实现。