    module Data.Either.HT (
       mapLeft,
       mapRight,
       mapBoth,
       ) where

    mapLeft :: (a -> b) -> Either a c -> Either b c
    mapLeft :: (a -> b) -> Either a c -> Either b c
    mapLeft f :: a -> b
    f = (a -> Either b c) -> (c -> Either b c) -> Either a c -> Either b c
    forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
    either (b -> Either b c
    forall a b. a -> Either a b
    Left (b -> Either b c) -> (a -> b) -> a -> Either b c
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . a -> b
    f) c -> Either b c
    forall a b. b -> Either a b
    Right

    mapRight :: (b -> c) -> Either a b -> Either a c
    mapRight :: (b -> c) -> Either a b -> Either a c
    mapRight f :: b -> c
    f = (a -> Either a c) -> (b -> Either a c) -> Either a b -> Either a c
    forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
    either a -> Either a c
    forall a b. a -> Either a b
    Left (c -> Either a c
    forall a b. b -> Either a b
    Right (c -> Either a c) -> (b -> c) -> b -> Either a c
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . b -> c
    f)

    mapBoth :: (a -> c) -> (b -> d) -> Either a b -> Either c d
    mapBoth :: (a -> c) -> (b -> d) -> Either a b -> Either c d
    mapBoth f :: a -> c
    f g :: b -> d
    g = (a -> Either c d) -> (b -> Either c d) -> Either a b -> Either c d
    forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
    either (c -> Either c d
    forall a b. a -> Either a b
    Left (c -> Either c d) -> (a -> c) -> a -> Either c d
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . a -> c
    f) (d -> Either c d
    forall a b. b -> Either a b
    Right (d -> Either c d) -> (b -> d) -> b -> Either c d
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . b -> d
    g)