第一和第二

如果只需要在第一个参数或第二个参数上共同映射,那么应该使用 firstsecond(代替 bimap)。

first::Bifunctor f => (a -> c) -> f a b -> f c b
first f = bimap f id

second::Bifunctor f => (b -> d) -> f a b -> f a d
second g = bimap id g

例如,

ghci> second (+ 2) (Right 40)
Right 42
ghci> second (+ 2) (Left "uh oh")
Left "uh oh"