Bifunctor
磨機 Functor 的執行在單一型別引數中是協變的。例如,如果 f 是 Functor,那麼給定 f a,以及形式 a -> b 的函式,可以獲得 f b(通過使用 fmap)。
Bifunctor 在兩個型別引數中是協變的。如果 f 是 Bifunctor,那麼給出一個 f a b 和兩個函式,一個來自 a -> c,另一個來自 b -> d,那麼就可以獲得一個 f c d(使用 bimap)。
first 應該被認為是第一類引數的 fmap,second 作為第二類的 fmap,bimap 應該被設想為分別在第一和第二型別引數上共同對映兩個函式。