module CabalGild.Unstable.Type.LegacyExeDependency 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.LegacyExeDependency as LegacyExeDependency

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

instance Ord LegacyExeDependency where
  compare :: LegacyExeDependency -> LegacyExeDependency -> Ordering
compare =
    (LegacyExeDependency -> (String, VersionRange Version))
-> LegacyExeDependency -> LegacyExeDependency -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
Ord.comparing ((LegacyExeDependency -> (String, VersionRange Version))
 -> LegacyExeDependency -> LegacyExeDependency -> Ordering)
-> (LegacyExeDependency -> (String, VersionRange Version))
-> LegacyExeDependency
-> LegacyExeDependency
-> Ordering
forall a b. (a -> b) -> a -> b
$
      (\(LegacyExeDependency.LegacyExeDependency String
s VersionRange
vr) -> (String
s, VersionRange -> VersionRange Version
VersionRange.fromVersionRange VersionRange
vr))
        (LegacyExeDependency -> (String, VersionRange Version))
-> (LegacyExeDependency -> LegacyExeDependency)
-> LegacyExeDependency
-> (String, VersionRange Version)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LegacyExeDependency -> LegacyExeDependency
unwrap

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

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