-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Bifunctors
--   
--   Bifunctors.
@package bifunctors
@version 5.5.4

module Data.Biapplicative
class Bifunctor p => Biapplicative p
bipure :: Biapplicative p => a -> b -> p a b
(<<*>>) :: Biapplicative p => p (a -> b) (c -> d) -> p a c -> p b d

-- | Lift binary functions
biliftA2 :: Biapplicative p => (a -> b -> c) -> (d -> e -> f) -> p a d -> p b e -> p c f

-- | 
--   a *>> b ≡ bimap (const id) (const id) <<$>> a <<*>> b
--   
(*>>) :: Biapplicative p => p a b -> p c d -> p c d

-- | 
--   a <<* b ≡ bimap const const <<$>> a <<*>> b
--   
(<<*) :: Biapplicative p => p a b -> p c d -> p a b
infixl 4 <<*>>
infixl 4 <<*
infixl 4 *>>
(<<$>>) :: (a -> b) -> a -> b
infixl 4 <<$>>
(<<**>>) :: Biapplicative p => p a c -> p (a -> b) (c -> d) -> p b d
infixl 4 <<**>>

-- | Lift ternary functions
biliftA3 :: Biapplicative w => (a -> b -> c -> d) -> (e -> f -> g -> h) -> w a e -> w b f -> w c g -> w d h

-- | Traverse a Traversable container in a Biapplicative.
--   
--   traverseBia satisfies the following properties:
--   
--   
--   
- Pairing 
traverseBia (,) t = (t,
--   t)

--   
- Composition 
traverseBia (Biff .
--   bimap g h . f) = Biff . bimap (traverse g)
--   (traverse h) . traverseBia
--   f

traverseBia (Tannen . fmap f . g) =
--   Tannen . fmap (traverseBia f) . traverse
--   g

--   
- Naturality 
 t . traverseBia f =
--   traverseBia (t . f)
for every biapplicative transformation
--   t.A biapplicative transformation from a
--   Biapplicative P to a Biapplicative Q
--   is a function
t :: P a b -> Q a b
preserving the
--   Biapplicative operations. That is,

- 
t (bipure
--   x y) = bipure x y

- 
t (x
--   <<*>> y) = t x <<*>> t
--   y

--   
--   
--   
Performance note
--   
--   traverseBia is fairly efficient, and uses compiler rewrite
--   rules to be even more efficient for a few important types like
--   []. However, if performance is critical, you might consider
--   writing a container-specific implementation.
traverseBia :: (Traversable t, Biapplicative p) => (a -> p b c) -> t a -> p (t b) (t c)

-- | Perform all the Biappicative actions in a Traversable
--   container and produce a container with all the results.
--   
--   
--   sequenceBia = traverseBia id
--   
sequenceBia :: (Traversable t, Biapplicative p) => t (p b c) -> p (t b) (t c)

-- | A version of traverseBia that doesn't care how the traversal is
--   done.
--   
--   
--   traverseBia = traverseBiaWith traverse
--   
traverseBiaWith :: forall p a b c s t. Biapplicative p => (forall f x. Applicative f => (a -> f x) -> s -> f (t x)) -> (a -> p b c) -> s -> p (t b) (t c)
instance GHC.Base.Functor (Data.Biapplicative.Mag a b)
instance GHC.Base.Applicative (Data.Biapplicative.Mag a b)
instance Data.Biapplicative.Biapplicative (,)
instance Data.Biapplicative.Biapplicative Data.Semigroup.Arg
instance GHC.Base.Monoid x => Data.Biapplicative.Biapplicative ((,,) x)
instance (GHC.Base.Monoid x, GHC.Base.Monoid y) => Data.Biapplicative.Biapplicative ((,,,) x y)
instance (GHC.Base.Monoid x, GHC.Base.Monoid y, GHC.Base.Monoid z) => Data.Biapplicative.Biapplicative ((,,,,) x y z)
instance (GHC.Base.Monoid x, GHC.Base.Monoid y, GHC.Base.Monoid z, GHC.Base.Monoid w) => Data.Biapplicative.Biapplicative ((,,,,,) x y z w)
instance (GHC.Base.Monoid x, GHC.Base.Monoid y, GHC.Base.Monoid z, GHC.Base.Monoid w, GHC.Base.Monoid v) => Data.Biapplicative.Biapplicative ((,,,,,,) x y z w v)
instance Data.Biapplicative.Biapplicative Data.Tagged.Tagged
instance Data.Biapplicative.Biapplicative Data.Functor.Const.Const

module Data.Bifunctor.Biff

-- | Compose two Functors on the inside of a Bifunctor.
newtype Biff p f g a b
Biff :: p (f a) (g b) -> Biff p f g a b
[runBiff] :: Biff p f g a b -> p (f a) (g b)
instance forall k1 k2 (p :: k1 -> k2 -> *) k3 (f :: k3 -> k1) k4 (g :: k4 -> k2) (a :: k3) (b :: k4). GHC.Generics.Generic (Data.Bifunctor.Biff.Biff p f g a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) k3 (f :: k3 -> k1) k4 (g :: k4 -> k2) (a :: k3) (b :: k4). GHC.Read.Read (p (f a) (g b)) => GHC.Read.Read (Data.Bifunctor.Biff.Biff p f g a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) k3 (f :: k3 -> k1) k4 (g :: k4 -> k2) (a :: k3) (b :: k4). GHC.Show.Show (p (f a) (g b)) => GHC.Show.Show (Data.Bifunctor.Biff.Biff p f g a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) k3 (f :: k3 -> k1) k4 (g :: k4 -> k2) (a :: k3) (b :: k4). GHC.Classes.Ord (p (f a) (g b)) => GHC.Classes.Ord (Data.Bifunctor.Biff.Biff p f g a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) k3 (f :: k3 -> k1) k4 (g :: k4 -> k2) (a :: k3) (b :: k4). GHC.Classes.Eq (p (f a) (g b)) => GHC.Classes.Eq (Data.Bifunctor.Biff.Biff p f g a b)
instance forall k1 k2 k3 (p :: k3 -> * -> *) (f :: k2 -> k3) (a :: k2) (g :: k1 -> *). GHC.Base.Functor (p (f a)) => GHC.Generics.Generic1 (Data.Bifunctor.Biff.Biff p f g a)
instance (Data.Bifunctor.Bifunctor p, GHC.Base.Functor f, GHC.Base.Functor g) => Data.Bifunctor.Bifunctor (Data.Bifunctor.Biff.Biff p f g)
instance forall k (p :: * -> * -> *) (g :: * -> *) (f :: k -> *) (a :: k). (Data.Bifunctor.Bifunctor p, GHC.Base.Functor g) => GHC.Base.Functor (Data.Bifunctor.Biff.Biff p f g a)
instance (Data.Biapplicative.Biapplicative p, GHC.Base.Applicative f, GHC.Base.Applicative g) => Data.Biapplicative.Biapplicative (Data.Bifunctor.Biff.Biff p f g)
instance forall k (p :: * -> * -> *) (g :: * -> *) (f :: k -> *) (a :: k). (Data.Bifoldable.Bifoldable p, Data.Foldable.Foldable g) => Data.Foldable.Foldable (Data.Bifunctor.Biff.Biff p f g a)
instance (Data.Bifoldable.Bifoldable p, Data.Foldable.Foldable f, Data.Foldable.Foldable g) => Data.Bifoldable.Bifoldable (Data.Bifunctor.Biff.Biff p f g)
instance forall k (p :: * -> * -> *) (g :: * -> *) (f :: k -> *) (a :: k). (Data.Bitraversable.Bitraversable p, Data.Traversable.Traversable g) => Data.Traversable.Traversable (Data.Bifunctor.Biff.Biff p f g a)
instance (Data.Bitraversable.Bitraversable p, Data.Traversable.Traversable f, Data.Traversable.Traversable g) => Data.Bitraversable.Bitraversable (Data.Bifunctor.Biff.Biff p f g)

-- | From the Functional Pearl "Clowns to the Left of me, Jokers to the
--   Right: Dissecting Data Structures" by Conor McBride.
module Data.Bifunctor.Clown

-- | Make a Functor over the first argument of a Bifunctor.
--   
--   Mnemonic: Clowns to the left (parameter of the
--   Bifunctor), jokers to the right.
newtype Clown f a b
Clown :: f a -> Clown f a b
[runClown] :: Clown f a b -> f a
instance forall k1 k2 (f :: k2 -> *) (a :: k2). GHC.Generics.Generic1 (Data.Bifunctor.Clown.Clown f a)
instance forall k1 (f :: k1 -> *) (a :: k1) k2 (b :: k2). GHC.Generics.Generic (Data.Bifunctor.Clown.Clown f a b)
instance forall k1 (f :: k1 -> *) (a :: k1) k2 (b :: k2). GHC.Read.Read (f a) => GHC.Read.Read (Data.Bifunctor.Clown.Clown f a b)
instance forall k1 (f :: k1 -> *) (a :: k1) k2 (b :: k2). GHC.Show.Show (f a) => GHC.Show.Show (Data.Bifunctor.Clown.Clown f a b)
instance forall k1 (f :: k1 -> *) (a :: k1) k2 (b :: k2). GHC.Classes.Ord (f a) => GHC.Classes.Ord (Data.Bifunctor.Clown.Clown f a b)
instance forall k1 (f :: k1 -> *) (a :: k1) k2 (b :: k2). GHC.Classes.Eq (f a) => GHC.Classes.Eq (Data.Bifunctor.Clown.Clown f a b)
instance GHC.Base.Functor f => Data.Bifunctor.Bifunctor (Data.Bifunctor.Clown.Clown f)
instance forall k (f :: k -> *) (a :: k). GHC.Base.Functor (Data.Bifunctor.Clown.Clown f a)
instance GHC.Base.Applicative f => Data.Biapplicative.Biapplicative (Data.Bifunctor.Clown.Clown f)
instance Data.Foldable.Foldable f => Data.Bifoldable.Bifoldable (Data.Bifunctor.Clown.Clown f)
instance forall k (f :: k -> *) (a :: k). Data.Foldable.Foldable (Data.Bifunctor.Clown.Clown f a)
instance Data.Traversable.Traversable f => Data.Bitraversable.Bitraversable (Data.Bifunctor.Clown.Clown f)
instance forall k (f :: k -> *) (a :: k). Data.Traversable.Traversable (Data.Bifunctor.Clown.Clown f a)

module Data.Bifunctor.Fix

-- | Greatest fixpoint of a Bifunctor (a Functor over the
--   first argument with zipping).
newtype Fix p a
In :: p (Fix p a) a -> Fix p a
[out] :: Fix p a -> p (Fix p a) a
instance forall k (p :: * -> k -> *) (a :: k). GHC.Generics.Generic (Data.Bifunctor.Fix.Fix p a)
instance forall k (p :: * -> k -> *) (a :: k). GHC.Classes.Eq (p (Data.Bifunctor.Fix.Fix p a) a) => GHC.Classes.Eq (Data.Bifunctor.Fix.Fix p a)
instance forall k (p :: * -> k -> *) (a :: k). GHC.Classes.Ord (p (Data.Bifunctor.Fix.Fix p a) a) => GHC.Classes.Ord (Data.Bifunctor.Fix.Fix p a)
instance forall k (p :: * -> k -> *) (a :: k). GHC.Show.Show (p (Data.Bifunctor.Fix.Fix p a) a) => GHC.Show.Show (Data.Bifunctor.Fix.Fix p a)
instance forall k (p :: * -> k -> *) (a :: k). GHC.Read.Read (p (Data.Bifunctor.Fix.Fix p a) a) => GHC.Read.Read (Data.Bifunctor.Fix.Fix p a)
instance Data.Bifunctor.Bifunctor p => GHC.Base.Functor (Data.Bifunctor.Fix.Fix p)
instance Data.Biapplicative.Biapplicative p => GHC.Base.Applicative (Data.Bifunctor.Fix.Fix p)
instance Data.Bifoldable.Bifoldable p => Data.Foldable.Foldable (Data.Bifunctor.Fix.Fix p)
instance Data.Bitraversable.Bitraversable p => Data.Traversable.Traversable (Data.Bifunctor.Fix.Fix p)

module Data.Bifunctor.Functor

-- | Using parametricity as an approximation of a natural transformation in
--   two arguments.
type (:->) p q = forall a b. p a b -> q a b
infixr 0 :->
class BifunctorFunctor t
bifmap :: BifunctorFunctor t => (p :-> q) -> t p :-> t q
class BifunctorFunctor t => BifunctorMonad t
bireturn :: BifunctorMonad t => p :-> t p
bibind :: BifunctorMonad t => (p :-> t q) -> t p :-> t q
bijoin :: BifunctorMonad t => t (t p) :-> t p
biliftM :: BifunctorMonad t => (p :-> q) -> t p :-> t q
class BifunctorFunctor t => BifunctorComonad t
biextract :: BifunctorComonad t => t p :-> p
biextend :: BifunctorComonad t => (t p :-> q) -> t p :-> t q
biduplicate :: BifunctorComonad t => t p :-> t (t p)
biliftW :: BifunctorComonad t => (p :-> q) -> t p :-> t q

module Data.Bifunctor.Flip

-- | Make a Bifunctor flipping the arguments of a Bifunctor.
newtype Flip p a b
Flip :: p b a -> Flip p a b
[runFlip] :: Flip p a b -> p b a
instance forall k1 k2 (p :: k2 -> k1 -> *) (a :: k1) (b :: k2). GHC.Generics.Generic (Data.Bifunctor.Flip.Flip p a b)
instance forall k1 k2 (p :: k2 -> k1 -> *) (a :: k1) (b :: k2). GHC.Read.Read (p b a) => GHC.Read.Read (Data.Bifunctor.Flip.Flip p a b)
instance forall k1 k2 (p :: k2 -> k1 -> *) (a :: k1) (b :: k2). GHC.Show.Show (p b a) => GHC.Show.Show (Data.Bifunctor.Flip.Flip p a b)
instance forall k1 k2 (p :: k2 -> k1 -> *) (a :: k1) (b :: k2). GHC.Classes.Ord (p b a) => GHC.Classes.Ord (Data.Bifunctor.Flip.Flip p a b)
instance forall k1 k2 (p :: k2 -> k1 -> *) (a :: k1) (b :: k2). GHC.Classes.Eq (p b a) => GHC.Classes.Eq (Data.Bifunctor.Flip.Flip p a b)
instance Data.Bifunctor.Bifunctor p => Data.Bifunctor.Bifunctor (Data.Bifunctor.Flip.Flip p)
instance Data.Bifunctor.Bifunctor p => GHC.Base.Functor (Data.Bifunctor.Flip.Flip p a)
instance Data.Biapplicative.Biapplicative p => Data.Biapplicative.Biapplicative (Data.Bifunctor.Flip.Flip p)
instance Data.Bifoldable.Bifoldable p => Data.Bifoldable.Bifoldable (Data.Bifunctor.Flip.Flip p)
instance Data.Bifoldable.Bifoldable p => Data.Foldable.Foldable (Data.Bifunctor.Flip.Flip p a)
instance Data.Bitraversable.Bitraversable p => Data.Bitraversable.Bitraversable (Data.Bifunctor.Flip.Flip p)
instance Data.Bitraversable.Bitraversable p => Data.Traversable.Traversable (Data.Bifunctor.Flip.Flip p a)
instance Data.Bifunctor.Functor.BifunctorFunctor Data.Bifunctor.Flip.Flip

module Data.Bifunctor.Join

-- | Make a Functor over both arguments of a Bifunctor.
newtype Join p a
Join :: p a a -> Join p a
[runJoin] :: Join p a -> p a a
instance forall k (p :: k -> k -> *) (a :: k). GHC.Generics.Generic (Data.Bifunctor.Join.Join p a)
instance forall k (p :: k -> k -> *) (a :: k). GHC.Classes.Eq (p a a) => GHC.Classes.Eq (Data.Bifunctor.Join.Join p a)
instance forall k (p :: k -> k -> *) (a :: k). GHC.Classes.Ord (p a a) => GHC.Classes.Ord (Data.Bifunctor.Join.Join p a)
instance forall k (p :: k -> k -> *) (a :: k). GHC.Show.Show (p a a) => GHC.Show.Show (Data.Bifunctor.Join.Join p a)
instance forall k (p :: k -> k -> *) (a :: k). GHC.Read.Read (p a a) => GHC.Read.Read (Data.Bifunctor.Join.Join p a)
instance Data.Bifunctor.Bifunctor p => GHC.Base.Functor (Data.Bifunctor.Join.Join p)
instance Data.Biapplicative.Biapplicative p => GHC.Base.Applicative (Data.Bifunctor.Join.Join p)
instance Data.Bifoldable.Bifoldable p => Data.Foldable.Foldable (Data.Bifunctor.Join.Join p)
instance Data.Bitraversable.Bitraversable p => Data.Traversable.Traversable (Data.Bifunctor.Join.Join p)

-- | From the Functional Pearl "Clowns to the Left of me, Jokers to the
--   Right: Dissecting Data Structures" by Conor McBride.
module Data.Bifunctor.Joker

-- | Make a Functor over the second argument of a Bifunctor.
--   
--   Mnemonic: Clowns to the left (parameter of the
--   Bifunctor), jokers to the right.
newtype Joker g a b
Joker :: g b -> Joker g a b
[runJoker] :: Joker g a b -> g b
instance forall k1 (g :: k1 -> *) k2 (a :: k2). GHC.Generics.Generic1 (Data.Bifunctor.Joker.Joker g a)
instance forall k1 (g :: k1 -> *) k2 (a :: k2) (b :: k1). GHC.Generics.Generic (Data.Bifunctor.Joker.Joker g a b)
instance forall k1 (g :: k1 -> *) k2 (a :: k2) (b :: k1). GHC.Read.Read (g b) => GHC.Read.Read (Data.Bifunctor.Joker.Joker g a b)
instance forall k1 (g :: k1 -> *) k2 (a :: k2) (b :: k1). GHC.Show.Show (g b) => GHC.Show.Show (Data.Bifunctor.Joker.Joker g a b)
instance forall k1 (g :: k1 -> *) k2 (a :: k2) (b :: k1). GHC.Classes.Ord (g b) => GHC.Classes.Ord (Data.Bifunctor.Joker.Joker g a b)
instance forall k1 (g :: k1 -> *) k2 (a :: k2) (b :: k1). GHC.Classes.Eq (g b) => GHC.Classes.Eq (Data.Bifunctor.Joker.Joker g a b)
instance GHC.Base.Functor g => Data.Bifunctor.Bifunctor (Data.Bifunctor.Joker.Joker g)
instance forall k (g :: * -> *) (a :: k). GHC.Base.Functor g => GHC.Base.Functor (Data.Bifunctor.Joker.Joker g a)
instance GHC.Base.Applicative g => Data.Biapplicative.Biapplicative (Data.Bifunctor.Joker.Joker g)
instance Data.Foldable.Foldable g => Data.Bifoldable.Bifoldable (Data.Bifunctor.Joker.Joker g)
instance forall k (g :: * -> *) (a :: k). Data.Foldable.Foldable g => Data.Foldable.Foldable (Data.Bifunctor.Joker.Joker g a)
instance Data.Traversable.Traversable g => Data.Bitraversable.Bitraversable (Data.Bifunctor.Joker.Joker g)
instance forall k (g :: * -> *) (a :: k). Data.Traversable.Traversable g => Data.Traversable.Traversable (Data.Bifunctor.Joker.Joker g a)

-- | The product of two bifunctors.
module Data.Bifunctor.Product

-- | Form the product of two bifunctors
data Product f g a b
Pair :: f a b -> g a b -> Product f g a b
instance forall k1 k2 (f :: k2 -> k1 -> *) (g :: k2 -> k1 -> *) (a :: k2). GHC.Generics.Generic1 (Data.Bifunctor.Product.Product f g a)
instance forall k1 k2 (f :: k1 -> k2 -> *) (g :: k1 -> k2 -> *) (a :: k1) (b :: k2). GHC.Generics.Generic (Data.Bifunctor.Product.Product f g a b)
instance forall k1 k2 (f :: k1 -> k2 -> *) (g :: k1 -> k2 -> *) (a :: k1) (b :: k2). (GHC.Read.Read (f a b), GHC.Read.Read (g a b)) => GHC.Read.Read (Data.Bifunctor.Product.Product f g a b)
instance forall k1 k2 (f :: k1 -> k2 -> *) (g :: k1 -> k2 -> *) (a :: k1) (b :: k2). (GHC.Show.Show (f a b), GHC.Show.Show (g a b)) => GHC.Show.Show (Data.Bifunctor.Product.Product f g a b)
instance forall k1 k2 (f :: k1 -> k2 -> *) (g :: k1 -> k2 -> *) (a :: k1) (b :: k2). (GHC.Classes.Ord (f a b), GHC.Classes.Ord (g a b)) => GHC.Classes.Ord (Data.Bifunctor.Product.Product f g a b)
instance forall k1 k2 (f :: k1 -> k2 -> *) (g :: k1 -> k2 -> *) (a :: k1) (b :: k2). (GHC.Classes.Eq (f a b), GHC.Classes.Eq (g a b)) => GHC.Classes.Eq (Data.Bifunctor.Product.Product f g a b)
instance (Data.Bifunctor.Bifunctor f, Data.Bifunctor.Bifunctor g) => Data.Bifunctor.Bifunctor (Data.Bifunctor.Product.Product f g)
instance (Data.Biapplicative.Biapplicative f, Data.Biapplicative.Biapplicative g) => Data.Biapplicative.Biapplicative (Data.Bifunctor.Product.Product f g)
instance (Data.Bifoldable.Bifoldable f, Data.Bifoldable.Bifoldable g) => Data.Bifoldable.Bifoldable (Data.Bifunctor.Product.Product f g)
instance (Data.Bitraversable.Bitraversable f, Data.Bitraversable.Bitraversable g) => Data.Bitraversable.Bitraversable (Data.Bifunctor.Product.Product f g)
instance forall k1 k2 (p :: k1 -> k2 -> *). Data.Bifunctor.Functor.BifunctorFunctor (Data.Bifunctor.Product.Product p)
instance forall k1 k2 (p :: k1 -> k2 -> *). Data.Bifunctor.Functor.BifunctorComonad (Data.Bifunctor.Product.Product p)

module Data.Bifunctor.Sum
data Sum p q a b
L2 :: p a b -> Sum p q a b
R2 :: q a b -> Sum p q a b
instance forall k1 k2 (p :: k2 -> k1 -> *) (q :: k2 -> k1 -> *) (a :: k2). GHC.Generics.Generic1 (Data.Bifunctor.Sum.Sum p q a)
instance forall k1 k2 (p :: k1 -> k2 -> *) (q :: k1 -> k2 -> *) (a :: k1) (b :: k2). GHC.Generics.Generic (Data.Bifunctor.Sum.Sum p q a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) (q :: k1 -> k2 -> *) (a :: k1) (b :: k2). (GHC.Read.Read (p a b), GHC.Read.Read (q a b)) => GHC.Read.Read (Data.Bifunctor.Sum.Sum p q a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) (q :: k1 -> k2 -> *) (a :: k1) (b :: k2). (GHC.Show.Show (p a b), GHC.Show.Show (q a b)) => GHC.Show.Show (Data.Bifunctor.Sum.Sum p q a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) (q :: k1 -> k2 -> *) (a :: k1) (b :: k2). (GHC.Classes.Ord (p a b), GHC.Classes.Ord (q a b)) => GHC.Classes.Ord (Data.Bifunctor.Sum.Sum p q a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) (q :: k1 -> k2 -> *) (a :: k1) (b :: k2). (GHC.Classes.Eq (p a b), GHC.Classes.Eq (q a b)) => GHC.Classes.Eq (Data.Bifunctor.Sum.Sum p q a b)
instance (Data.Bifunctor.Bifunctor p, Data.Bifunctor.Bifunctor q) => Data.Bifunctor.Bifunctor (Data.Bifunctor.Sum.Sum p q)
instance (Data.Bifoldable.Bifoldable p, Data.Bifoldable.Bifoldable q) => Data.Bifoldable.Bifoldable (Data.Bifunctor.Sum.Sum p q)
instance (Data.Bitraversable.Bitraversable p, Data.Bitraversable.Bitraversable q) => Data.Bitraversable.Bitraversable (Data.Bifunctor.Sum.Sum p q)
instance forall k1 k2 (p :: k1 -> k2 -> *). Data.Bifunctor.Functor.BifunctorFunctor (Data.Bifunctor.Sum.Sum p)
instance forall k1 k2 (p :: k1 -> k2 -> *). Data.Bifunctor.Functor.BifunctorMonad (Data.Bifunctor.Sum.Sum p)

-- | Functions to mechanically derive Bifunctor, Bifoldable,
--   or Bitraversable instances, or to splice their functions
--   directly into source code. You need to enable the
--   TemplateHaskell language extension in order to use this
--   module.
module Data.Bifunctor.TH

-- | Generates a Bifunctor instance declaration for the given data
--   type or data family instance.
deriveBifunctor :: Name -> Q [Dec]

-- | Like deriveBifunctor, but takes an Options argument.
deriveBifunctorOptions :: Options -> Name -> Q [Dec]

-- | Generates a lambda expression which behaves like bimap
--   (without requiring a Bifunctor instance).
makeBimap :: Name -> Q Exp

-- | Like makeBimap, but takes an Options argument.
makeBimapOptions :: Options -> Name -> Q Exp

-- | Generates a Bifoldable instance declaration for the given data
--   type or data family instance.
deriveBifoldable :: Name -> Q [Dec]

-- | Like deriveBifoldable, but takes an Options argument.
deriveBifoldableOptions :: Options -> Name -> Q [Dec]
makeBifold :: Name -> Q Exp

-- | Like makeBifold, but takes an Options argument.
makeBifoldOptions :: Options -> Name -> Q Exp

-- | Generates a lambda expression which behaves like bifoldMap
--   (without requiring a Bifoldable instance).
makeBifoldMap :: Name -> Q Exp

-- | Like makeBifoldMap, but takes an Options argument.
makeBifoldMapOptions :: Options -> Name -> Q Exp

-- | Generates a lambda expression which behaves like bifoldr
--   (without requiring a Bifoldable instance).
makeBifoldr :: Name -> Q Exp

-- | Like makeBifoldr, but takes an Options argument.
makeBifoldrOptions :: Options -> Name -> Q Exp

-- | Generates a lambda expression which behaves like bifoldl
--   (without requiring a Bifoldable instance).
makeBifoldl :: Name -> Q Exp

-- | Like makeBifoldl, but takes an Options argument.
makeBifoldlOptions :: Options -> Name -> Q Exp

-- | Generates a Bitraversable instance declaration for the given
--   data type or data family instance.
deriveBitraversable :: Name -> Q [Dec]

-- | Like deriveBitraversable, but takes an Options argument.
deriveBitraversableOptions :: Options -> Name -> Q [Dec]

-- | Generates a lambda expression which behaves like bitraverse
--   (without requiring a Bitraversable instance).
makeBitraverse :: Name -> Q Exp

-- | Like makeBitraverse, but takes an Options argument.
makeBitraverseOptions :: Options -> Name -> Q Exp

-- | Generates a lambda expression which behaves like bisequenceA
--   (without requiring a Bitraversable instance).
makeBisequenceA :: Name -> Q Exp

-- | Like makeBitraverseA, but takes an Options argument.
makeBisequenceAOptions :: Options -> Name -> Q Exp

-- | Generates a lambda expression which behaves like bimapM
--   (without requiring a Bitraversable instance).
makeBimapM :: Name -> Q Exp

-- | Like makeBimapM, but takes an Options argument.
makeBimapMOptions :: Options -> Name -> Q Exp

-- | Generates a lambda expression which behaves like bisequence
--   (without requiring a Bitraversable instance).
makeBisequence :: Name -> Q Exp

-- | Like makeBisequence, but takes an Options argument.
makeBisequenceOptions :: Options -> Name -> Q Exp

-- | Options that further configure how the functions in
--   Data.Bifunctor.TH should behave.
newtype Options
Options :: Bool -> Options

-- | If True, derived instances for empty data types (i.e., ones
--   with no data constructors) will use the EmptyCase language
--   extension. If False, derived instances will simply use
--   seq instead. (This has no effect on GHCs before 7.8, since
--   EmptyCase is only available in 7.8 or later.)
[emptyCaseBehavior] :: Options -> Bool

-- | Conservative Options that doesn't attempt to use
--   EmptyCase (to prevent users from having to enable that
--   extension at use sites.)
defaultOptions :: Options
instance GHC.Classes.Eq Data.Bifunctor.TH.BiFun
instance GHC.Show.Show Data.Bifunctor.TH.Options
instance GHC.Read.Read Data.Bifunctor.TH.Options
instance GHC.Classes.Ord Data.Bifunctor.TH.Options
instance GHC.Classes.Eq Data.Bifunctor.TH.Options

module Data.Bifunctor.Tannen

-- | Compose a Functor on the outside of a Bifunctor.
newtype Tannen f p a b
Tannen :: f (p a b) -> Tannen f p a b
[runTannen] :: Tannen f p a b -> f (p a b)
instance forall k1 (f :: k1 -> *) k2 k3 (p :: k2 -> k3 -> k1) (a :: k2) (b :: k3). GHC.Generics.Generic (Data.Bifunctor.Tannen.Tannen f p a b)
instance forall k1 (f :: k1 -> *) k2 k3 (p :: k2 -> k3 -> k1) (a :: k2) (b :: k3). GHC.Read.Read (f (p a b)) => GHC.Read.Read (Data.Bifunctor.Tannen.Tannen f p a b)
instance forall k1 (f :: k1 -> *) k2 k3 (p :: k2 -> k3 -> k1) (a :: k2) (b :: k3). GHC.Show.Show (f (p a b)) => GHC.Show.Show (Data.Bifunctor.Tannen.Tannen f p a b)
instance forall k1 (f :: k1 -> *) k2 k3 (p :: k2 -> k3 -> k1) (a :: k2) (b :: k3). GHC.Classes.Ord (f (p a b)) => GHC.Classes.Ord (Data.Bifunctor.Tannen.Tannen f p a b)
instance forall k1 (f :: k1 -> *) k2 k3 (p :: k2 -> k3 -> k1) (a :: k2) (b :: k3). GHC.Classes.Eq (f (p a b)) => GHC.Classes.Eq (Data.Bifunctor.Tannen.Tannen f p a b)
instance forall k1 k2 (f :: * -> *) (p :: k1 -> k2 -> *) (a :: k1). GHC.Base.Functor f => GHC.Generics.Generic1 (Data.Bifunctor.Tannen.Tannen f p a)
instance GHC.Base.Functor f => Data.Bifunctor.Functor.BifunctorFunctor (Data.Bifunctor.Tannen.Tannen f)
instance (GHC.Base.Functor f, GHC.Base.Monad f) => Data.Bifunctor.Functor.BifunctorMonad (Data.Bifunctor.Tannen.Tannen f)
instance Control.Comonad.Comonad f => Data.Bifunctor.Functor.BifunctorComonad (Data.Bifunctor.Tannen.Tannen f)
instance (GHC.Base.Functor f, Data.Bifunctor.Bifunctor p) => Data.Bifunctor.Bifunctor (Data.Bifunctor.Tannen.Tannen f p)
instance (GHC.Base.Functor f, Data.Bifunctor.Bifunctor p) => GHC.Base.Functor (Data.Bifunctor.Tannen.Tannen f p a)
instance (GHC.Base.Applicative f, Data.Biapplicative.Biapplicative p) => Data.Biapplicative.Biapplicative (Data.Bifunctor.Tannen.Tannen f p)
instance (Data.Foldable.Foldable f, Data.Bifoldable.Bifoldable p) => Data.Foldable.Foldable (Data.Bifunctor.Tannen.Tannen f p a)
instance (Data.Foldable.Foldable f, Data.Bifoldable.Bifoldable p) => Data.Bifoldable.Bifoldable (Data.Bifunctor.Tannen.Tannen f p)
instance (Data.Traversable.Traversable f, Data.Bitraversable.Bitraversable p) => Data.Traversable.Traversable (Data.Bifunctor.Tannen.Tannen f p a)
instance (Data.Traversable.Traversable f, Data.Bitraversable.Bitraversable p) => Data.Bitraversable.Bitraversable (Data.Bifunctor.Tannen.Tannen f p)
instance forall k (f :: * -> *) (p :: k -> k -> *). (GHC.Base.Applicative f, Control.Category.Category p) => Control.Category.Category (Data.Bifunctor.Tannen.Tannen f p)
instance (GHC.Base.Applicative f, Control.Arrow.Arrow p) => Control.Arrow.Arrow (Data.Bifunctor.Tannen.Tannen f p)
instance (GHC.Base.Applicative f, Control.Arrow.ArrowChoice p) => Control.Arrow.ArrowChoice (Data.Bifunctor.Tannen.Tannen f p)
instance (GHC.Base.Applicative f, Control.Arrow.ArrowLoop p) => Control.Arrow.ArrowLoop (Data.Bifunctor.Tannen.Tannen f p)
instance (GHC.Base.Applicative f, Control.Arrow.ArrowZero p) => Control.Arrow.ArrowZero (Data.Bifunctor.Tannen.Tannen f p)
instance (GHC.Base.Applicative f, Control.Arrow.ArrowPlus p) => Control.Arrow.ArrowPlus (Data.Bifunctor.Tannen.Tannen f p)

module Data.Bifunctor.Wrapped

-- | Make a Functor over the second argument of a Bifunctor.
newtype WrappedBifunctor p a b
WrapBifunctor :: p a b -> WrappedBifunctor p a b
[unwrapBifunctor] :: WrappedBifunctor p a b -> p a b
instance forall k1 k2 (p :: k2 -> k1 -> *) (a :: k2). GHC.Generics.Generic1 (Data.Bifunctor.Wrapped.WrappedBifunctor p a)
instance forall k1 k2 (p :: k1 -> k2 -> *) (a :: k1) (b :: k2). GHC.Generics.Generic (Data.Bifunctor.Wrapped.WrappedBifunctor p a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) (a :: k1) (b :: k2). GHC.Read.Read (p a b) => GHC.Read.Read (Data.Bifunctor.Wrapped.WrappedBifunctor p a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) (a :: k1) (b :: k2). GHC.Show.Show (p a b) => GHC.Show.Show (Data.Bifunctor.Wrapped.WrappedBifunctor p a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) (a :: k1) (b :: k2). GHC.Classes.Ord (p a b) => GHC.Classes.Ord (Data.Bifunctor.Wrapped.WrappedBifunctor p a b)
instance forall k1 k2 (p :: k1 -> k2 -> *) (a :: k1) (b :: k2). GHC.Classes.Eq (p a b) => GHC.Classes.Eq (Data.Bifunctor.Wrapped.WrappedBifunctor p a b)
instance Data.Bifunctor.Bifunctor p => Data.Bifunctor.Bifunctor (Data.Bifunctor.Wrapped.WrappedBifunctor p)
instance Data.Bifunctor.Bifunctor p => GHC.Base.Functor (Data.Bifunctor.Wrapped.WrappedBifunctor p a)
instance Data.Biapplicative.Biapplicative p => Data.Biapplicative.Biapplicative (Data.Bifunctor.Wrapped.WrappedBifunctor p)
instance Data.Bifoldable.Bifoldable p => Data.Foldable.Foldable (Data.Bifunctor.Wrapped.WrappedBifunctor p a)
instance Data.Bifoldable.Bifoldable p => Data.Bifoldable.Bifoldable (Data.Bifunctor.Wrapped.WrappedBifunctor p)
instance Data.Bitraversable.Bitraversable p => Data.Traversable.Traversable (Data.Bifunctor.Wrapped.WrappedBifunctor p a)
instance Data.Bitraversable.Bitraversable p => Data.Bitraversable.Bitraversable (Data.Bifunctor.Wrapped.WrappedBifunctor p)
