{-# LANGUAGE DeriveGeneric #-}

module Ouroboros.Consensus.HardFork.Combinator.Util.Functors (Product2 (..)) where

import           GHC.Generics (Generic)

data Product2 f g x y = Pair2 (f x y) (g x y)
  deriving (Product2 f g x y -> Product2 f g x y -> Bool
(Product2 f g x y -> Product2 f g x y -> Bool)
-> (Product2 f g x y -> Product2 f g x y -> Bool)
-> Eq (Product2 f g x y)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Eq (f x y), Eq (g x y)) =>
Product2 f g x y -> Product2 f g x y -> Bool
/= :: Product2 f g x y -> Product2 f g x y -> Bool
$c/= :: forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Eq (f x y), Eq (g x y)) =>
Product2 f g x y -> Product2 f g x y -> Bool
== :: Product2 f g x y -> Product2 f g x y -> Bool
$c== :: forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Eq (f x y), Eq (g x y)) =>
Product2 f g x y -> Product2 f g x y -> Bool
Eq, (forall x. Product2 f g x y -> Rep (Product2 f g x y) x)
-> (forall x. Rep (Product2 f g x y) x -> Product2 f g x y)
-> Generic (Product2 f g x y)
forall x. Rep (Product2 f g x y) x -> Product2 f g x y
forall x. Product2 f g x y -> Rep (Product2 f g x y) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (f :: * -> * -> *) (g :: * -> * -> *) x y x.
Rep (Product2 f g x y) x -> Product2 f g x y
forall (f :: * -> * -> *) (g :: * -> * -> *) x y x.
Product2 f g x y -> Rep (Product2 f g x y) x
$cto :: forall (f :: * -> * -> *) (g :: * -> * -> *) x y x.
Rep (Product2 f g x y) x -> Product2 f g x y
$cfrom :: forall (f :: * -> * -> *) (g :: * -> * -> *) x y x.
Product2 f g x y -> Rep (Product2 f g x y) x
Generic, Int -> Product2 f g x y -> ShowS
[Product2 f g x y] -> ShowS
Product2 f g x y -> String
(Int -> Product2 f g x y -> ShowS)
-> (Product2 f g x y -> String)
-> ([Product2 f g x y] -> ShowS)
-> Show (Product2 f g x y)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Show (f x y), Show (g x y)) =>
Int -> Product2 f g x y -> ShowS
forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Show (f x y), Show (g x y)) =>
[Product2 f g x y] -> ShowS
forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Show (f x y), Show (g x y)) =>
Product2 f g x y -> String
showList :: [Product2 f g x y] -> ShowS
$cshowList :: forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Show (f x y), Show (g x y)) =>
[Product2 f g x y] -> ShowS
show :: Product2 f g x y -> String
$cshow :: forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Show (f x y), Show (g x y)) =>
Product2 f g x y -> String
showsPrec :: Int -> Product2 f g x y -> ShowS
$cshowsPrec :: forall (f :: * -> * -> *) (g :: * -> * -> *) x y.
(Show (f x y), Show (g x y)) =>
Int -> Product2 f g x y -> ShowS
Show)