module CabalGild.Unstable.Type.PkgconfigVersionRange where

import qualified CabalGild.Unstable.Type.VersionRange as VersionRange
import qualified Data.Ord as Ord
import qualified Distribution.Parsec as Parsec
import qualified Distribution.Pretty as Pretty
import qualified Distribution.Types.PkgconfigVersionRange as PkgconfigVersionRange

-- | This type exists to provide an 'Ord' instance for
-- 'PkgconfigVersionRange.PkgconfigVersionRange', which was added in
-- @Cabal-syntax-3.10.1.0@.
newtype PkgconfigVersionRange = PkgconfigVersionRange
  { PkgconfigVersionRange -> PkgconfigVersionRange
unwrap :: PkgconfigVersionRange.PkgconfigVersionRange
  }
  deriving (PkgconfigVersionRange -> PkgconfigVersionRange -> Bool
(PkgconfigVersionRange -> PkgconfigVersionRange -> Bool)
-> (PkgconfigVersionRange -> PkgconfigVersionRange -> Bool)
-> Eq PkgconfigVersionRange
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PkgconfigVersionRange -> PkgconfigVersionRange -> Bool
== :: PkgconfigVersionRange -> PkgconfigVersionRange -> Bool
$c/= :: PkgconfigVersionRange -> PkgconfigVersionRange -> Bool
/= :: PkgconfigVersionRange -> PkgconfigVersionRange -> Bool
Eq, Int -> PkgconfigVersionRange -> ShowS
[PkgconfigVersionRange] -> ShowS
PkgconfigVersionRange -> String
(Int -> PkgconfigVersionRange -> ShowS)
-> (PkgconfigVersionRange -> String)
-> ([PkgconfigVersionRange] -> ShowS)
-> Show PkgconfigVersionRange
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PkgconfigVersionRange -> ShowS
showsPrec :: Int -> PkgconfigVersionRange -> ShowS
$cshow :: PkgconfigVersionRange -> String
show :: PkgconfigVersionRange -> String
$cshowList :: [PkgconfigVersionRange] -> ShowS
showList :: [PkgconfigVersionRange] -> ShowS
Show)

instance Ord PkgconfigVersionRange where
  compare :: PkgconfigVersionRange -> PkgconfigVersionRange -> Ordering
compare =
    (PkgconfigVersionRange -> VersionRange PkgconfigVersion)
-> PkgconfigVersionRange -> PkgconfigVersionRange -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
Ord.comparing ((PkgconfigVersionRange -> VersionRange PkgconfigVersion)
 -> PkgconfigVersionRange -> PkgconfigVersionRange -> Ordering)
-> (PkgconfigVersionRange -> VersionRange PkgconfigVersion)
-> PkgconfigVersionRange
-> PkgconfigVersionRange
-> Ordering
forall a b. (a -> b) -> a -> b
$
      PkgconfigVersionRange -> VersionRange PkgconfigVersion
VersionRange.fromPkgconfigVersionRange
        (PkgconfigVersionRange -> VersionRange PkgconfigVersion)
-> (PkgconfigVersionRange -> PkgconfigVersionRange)
-> PkgconfigVersionRange
-> VersionRange PkgconfigVersion
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PkgconfigVersionRange -> PkgconfigVersionRange
unwrap

instance Parsec.Parsec PkgconfigVersionRange where
  parsec :: forall (m :: * -> *). CabalParsing m => m PkgconfigVersionRange
parsec = PkgconfigVersionRange -> PkgconfigVersionRange
PkgconfigVersionRange (PkgconfigVersionRange -> PkgconfigVersionRange)
-> m PkgconfigVersionRange -> m PkgconfigVersionRange
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m PkgconfigVersionRange
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
forall (m :: * -> *). CabalParsing m => m PkgconfigVersionRange
Parsec.parsec

instance Pretty.Pretty PkgconfigVersionRange where
  pretty :: PkgconfigVersionRange -> Doc
pretty = PkgconfigVersionRange -> Doc
forall a. Pretty a => a -> Doc
Pretty.pretty (PkgconfigVersionRange -> Doc)
-> (PkgconfigVersionRange -> PkgconfigVersionRange)
-> PkgconfigVersionRange
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PkgconfigVersionRange -> PkgconfigVersionRange
unwrap