    {-# LANGUAGE CPP #-}
    {-# LANGUAGE Safe #-}
    -----------------------------------------------------------------------------
    -- |
    -- Copyright   :  (C) 2011-2015 Edward Kmett
    -- License     :  BSD-style (see the file LICENSE)
    --
    -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
    -- Stability   :  provisional
    -- Portability :  portable
    --
    ----------------------------------------------------------------------------
    module Data.Semigroup.Bitraversable
      ( Bitraversable1(..)
      , bifoldMap1Default
      ) where

    import Control.Applicative
    #if !(MIN_VERSION_base(4,11,0))
    import Data.Semigroup
    #endif
    import Data.Semigroup.Traversable.Class

    bifoldMap1Default :: (Bitraversable1 t, Semigroup m) => (a -> m) -> (b -> m) -> t a b -> m
    bifoldMap1Default :: forall (t :: * -> * -> *) m a b.
    (Bitraversable1 t, Semigroup m) =>
    (a -> m) -> (b -> m) -> t a b -> m
    bifoldMap1Default a -> m
    f b -> m
    g = Const m (t (ZonkAny 0) (ZonkAny 1)) -> m
    forall {k} a (b :: k). Const a b -> a
    getConst (Const m (t (ZonkAny 0) (ZonkAny 1)) -> m)
    -> (t a b -> Const m (t (ZonkAny 0) (ZonkAny 1))) -> t a b -> m
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . (a -> Const m (ZonkAny 0))
    -> (b -> Const m (ZonkAny 1))
    -> t a b
    -> Const m (t (ZonkAny 0) (ZonkAny 1))
    forall (f :: * -> *) a b c d.
    Apply f =>
    (a -> f b) -> (c -> f d) -> t a c -> f (t b d)
    forall (t :: * -> * -> *) (f :: * -> *) a b c d.
    (Bitraversable1 t, Apply f) =>
    (a -> f b) -> (c -> f d) -> t a c -> f (t b d)
    bitraverse1 (m -> Const m (ZonkAny 0)
    forall {k} a (b :: k). a -> Const a b
    Const (m -> Const m (ZonkAny 0)) -> (a -> m) -> a -> Const m (ZonkAny 0)
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . a -> m
    f) (m -> Const m (ZonkAny 1)
    forall {k} a (b :: k). a -> Const a b
    Const (m -> Const m (ZonkAny 1)) -> (b -> m) -> b -> Const m (ZonkAny 1)
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . b -> m
    g)
    {-# INLINE bifoldMap1Default #-}