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 軟體包。