module Hpgsql.Time
  ( Unbounded (..),
  )
where

-- | Use this type to represent -infinity and +infinity.
data Unbounded a
  = NegInfinity
  | Finite !a
  | PosInfinity
  deriving (Unbounded a -> Unbounded a -> Bool
(Unbounded a -> Unbounded a -> Bool)
-> (Unbounded a -> Unbounded a -> Bool) -> Eq (Unbounded a)
forall a. Eq a => Unbounded a -> Unbounded a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Unbounded a -> Unbounded a -> Bool
== :: Unbounded a -> Unbounded a -> Bool
$c/= :: forall a. Eq a => Unbounded a -> Unbounded a -> Bool
/= :: Unbounded a -> Unbounded a -> Bool
Eq, Eq (Unbounded a)
Eq (Unbounded a) =>
(Unbounded a -> Unbounded a -> Ordering)
-> (Unbounded a -> Unbounded a -> Bool)
-> (Unbounded a -> Unbounded a -> Bool)
-> (Unbounded a -> Unbounded a -> Bool)
-> (Unbounded a -> Unbounded a -> Bool)
-> (Unbounded a -> Unbounded a -> Unbounded a)
-> (Unbounded a -> Unbounded a -> Unbounded a)
-> Ord (Unbounded a)
Unbounded a -> Unbounded a -> Bool
Unbounded a -> Unbounded a -> Ordering
Unbounded a -> Unbounded a -> Unbounded a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (Unbounded a)
forall a. Ord a => Unbounded a -> Unbounded a -> Bool
forall a. Ord a => Unbounded a -> Unbounded a -> Ordering
forall a. Ord a => Unbounded a -> Unbounded a -> Unbounded a
$ccompare :: forall a. Ord a => Unbounded a -> Unbounded a -> Ordering
compare :: Unbounded a -> Unbounded a -> Ordering
$c< :: forall a. Ord a => Unbounded a -> Unbounded a -> Bool
< :: Unbounded a -> Unbounded a -> Bool
$c<= :: forall a. Ord a => Unbounded a -> Unbounded a -> Bool
<= :: Unbounded a -> Unbounded a -> Bool
$c> :: forall a. Ord a => Unbounded a -> Unbounded a -> Bool
> :: Unbounded a -> Unbounded a -> Bool
$c>= :: forall a. Ord a => Unbounded a -> Unbounded a -> Bool
>= :: Unbounded a -> Unbounded a -> Bool
$cmax :: forall a. Ord a => Unbounded a -> Unbounded a -> Unbounded a
max :: Unbounded a -> Unbounded a -> Unbounded a
$cmin :: forall a. Ord a => Unbounded a -> Unbounded a -> Unbounded a
min :: Unbounded a -> Unbounded a -> Unbounded a
Ord, (forall a b. (a -> b) -> Unbounded a -> Unbounded b)
-> (forall a b. a -> Unbounded b -> Unbounded a)
-> Functor Unbounded
forall a b. a -> Unbounded b -> Unbounded a
forall a b. (a -> b) -> Unbounded a -> Unbounded b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Unbounded a -> Unbounded b
fmap :: forall a b. (a -> b) -> Unbounded a -> Unbounded b
$c<$ :: forall a b. a -> Unbounded b -> Unbounded a
<$ :: forall a b. a -> Unbounded b -> Unbounded a
Functor)

instance (Show a) => Show (Unbounded a) where
  show :: Unbounded a -> String
show =
    \case
      Unbounded a
NegInfinity -> String
"-infinity"
      Finite a
time -> a -> String
forall a. Show a => a -> String
show a
time
      Unbounded a
PosInfinity -> String
"infinity"