(original) (raw)

{-# LANGUAGE Safe #-} {-# LANGUAGE CPP #-}

module Data.Bifunctor ( Bifunctor(..) ) where

import Control.Applicative ( Const(..) ) import GHC.Generics ( K1(..) )

class Bifunctor p where {-# MINIMAL bimap | first, second #-}

[bimap](Data.Bifunctor.html#bimap) :: ([a](#local-6989586621679425408) -> [b](#local-6989586621679425409)) -> ([c](#local-6989586621679425410) -> [d](#local-6989586621679425411)) -> [p](#local-6989586621679425407) [a](#local-6989586621679425408) [c](#local-6989586621679425410) -> [p](#local-6989586621679425407) [b](#local-6989586621679425409) [d](#local-6989586621679425411)
[bimap](Data.Bifunctor.html#bimap) [f](#local-6989586621679425418) [g](#local-6989586621679425419) = [first](Data.Bifunctor.html#first) [f](#local-6989586621679425418) [.](GHC.Base.html#.) [second](Data.Bifunctor.html#second) [g](#local-6989586621679425419)


[first](Data.Bifunctor.html#first) :: ([a](#local-6989586621679425412) -> [b](#local-6989586621679425413)) -> [p](#local-6989586621679425407) [a](#local-6989586621679425412) [c](#local-6989586621679425414) -> [p](#local-6989586621679425407) [b](#local-6989586621679425413) [c](#local-6989586621679425414)
[first](Data.Bifunctor.html#first) [f](#local-6989586621679425420) = [bimap](Data.Bifunctor.html#bimap) [f](#local-6989586621679425420) [id](GHC.Base.html#id)


[second](Data.Bifunctor.html#second) :: ([b](#local-6989586621679425415) -> [c](#local-6989586621679425416)) -> [p](#local-6989586621679425407) [a](#local-6989586621679425417) [b](#local-6989586621679425415) -> [p](#local-6989586621679425407) [a](#local-6989586621679425417) [c](#local-6989586621679425416)
[second](Data.Bifunctor.html#second) = [bimap](Data.Bifunctor.html#bimap) [id](GHC.Base.html#id)

instance Bifunctor (,) where bimap f g ~(a, b) = (f a, g b)

instance Bifunctor ((,,) x1) where bimap f g ~(x1, a, b) = (x1, f a, g b)

instance Bifunctor ((,,,) x1 x2) where bimap f g ~(x1, x2, a, b) = (x1, x2, f a, g b)

instance Bifunctor ((,,,,) x1 x2 x3) where bimap f g ~(x1, x2, x3, a, b) = (x1, x2, x3, f a, g b)

instance Bifunctor ((,,,,,) x1 x2 x3 x4) where bimap f g ~(x1, x2, x3, x4, a, b) = (x1, x2, x3, x4, f a, g b)

instance Bifunctor ((,,,,,,) x1 x2 x3 x4 x5) where bimap f g ~(x1, x2, x3, x4, x5, a, b) = (x1, x2, x3, x4, x5, f a, g b)

instance Bifunctor Either where bimap f _ (Left a) = Left (f a) bimap _ g (Right b) = Right (g b)

instance Bifunctor Const where bimap f _ (Const a) = Const (f a)

instance Bifunctor (K1 i) where bimap f _ (K1 c) = K1 (f c)