module Data.Paired.Common where



-- | Shall we combine elements on the main diagonal as well?
--
-- If we choose @NoDiag@, we deal with upper triangular matrices that are
-- effectively one element smaller.

data OnDiag = OnDiag | NoDiag
  deriving (OnDiag -> OnDiag -> Bool
(OnDiag -> OnDiag -> Bool)
-> (OnDiag -> OnDiag -> Bool) -> Eq OnDiag
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OnDiag -> OnDiag -> Bool
$c/= :: OnDiag -> OnDiag -> Bool
== :: OnDiag -> OnDiag -> Bool
$c== :: OnDiag -> OnDiag -> Bool
Eq)

-- | Select only a subset of the possible enumerations.

data Enumerate
  -- | Enumerate all elements
  = All
  -- | Enumerate from a value and at most @N@ elements
  | FromN Int Int
  deriving (Enumerate -> Enumerate -> Bool
(Enumerate -> Enumerate -> Bool)
-> (Enumerate -> Enumerate -> Bool) -> Eq Enumerate
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Enumerate -> Enumerate -> Bool
$c/= :: Enumerate -> Enumerate -> Bool
== :: Enumerate -> Enumerate -> Bool
$c== :: Enumerate -> Enumerate -> Bool
Eq)

-- | If the size of the input is known before-hand or not.

data SizeHint
  = UnknownSize
  | KnownSize Int
  deriving (SizeHint -> SizeHint -> Bool
(SizeHint -> SizeHint -> Bool)
-> (SizeHint -> SizeHint -> Bool) -> Eq SizeHint
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SizeHint -> SizeHint -> Bool
$c/= :: SizeHint -> SizeHint -> Bool
== :: SizeHint -> SizeHint -> Bool
$c== :: SizeHint -> SizeHint -> Bool
Eq)