Bifunctor 的常见实例

双元素元组

(,) 是具有 Bifunctor 实例的类型的示例。

instance Bifunctor (,) where
    bimap f g (x, y) = (f x, g y)

bimap 接受一对函数并将它们应用于元组的各个组件。

bimap (+ 2) (++ "nie") (3, "john") --> (5,"johnnie")
bimap ceiling length (3.5 :: Double, "john" :: String) --> (4,4)

Either

EitherBifunctor 实例根据值是 Left 还是 Right 选择要应用的两个函数中的一个。

instance Bifunctor Either where
    bimap f g (Left x) = Left (f x)
    bimap f g (Right y) = Right (g y)