Bifunctor 的定义

Bifunctor 是具有两个类型参数(f :: * -> * -> *)的类型,两者都可以同时进行协变映射。

class Bifunctor f where
    bimap :: (a -> c) -> (b -> d) -> f a b -> f c d

bimap 可以被认为是将一对 fmap 操作应用于数据类型。

对于 f 类型,Bifunctor 的正确实例必须满足 bifunctor 定律,这类似于子定律

bimap id id = id  -- identity
bimap (f . g) (h . i) = bimap f h . bimap g i  -- composition

Bifunctor 类位于 Data.Bifunctor 模块中。对于 GHC 版本> 7.10,该模块与编译器绑定在一起; 对于早期版本,你需要安装 bifunctors 软件包。