module CabalGild.Unstable.Type.ModuleReexport where

import qualified Data.Ord as Ord
import qualified Distribution.Parsec as Parsec
import qualified Distribution.Pretty as Pretty
import qualified Distribution.Types.ModuleReexport as ModuleReexport

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

instance Ord ModuleReexport where
  compare :: ModuleReexport -> ModuleReexport -> Ordering
compare =
    (ModuleReexport -> (Maybe PackageName, ModuleName, ModuleName))
-> ModuleReexport -> ModuleReexport -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
Ord.comparing ((ModuleReexport -> (Maybe PackageName, ModuleName, ModuleName))
 -> ModuleReexport -> ModuleReexport -> Ordering)
-> (ModuleReexport -> (Maybe PackageName, ModuleName, ModuleName))
-> ModuleReexport
-> ModuleReexport
-> Ordering
forall a b. (a -> b) -> a -> b
$
      (\(ModuleReexport.ModuleReexport Maybe PackageName
mpn ModuleName
mn1 ModuleName
mn2) -> (Maybe PackageName
mpn, ModuleName
mn1, ModuleName
mn2))
        (ModuleReexport -> (Maybe PackageName, ModuleName, ModuleName))
-> (ModuleReexport -> ModuleReexport)
-> ModuleReexport
-> (Maybe PackageName, ModuleName, ModuleName)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ModuleReexport -> ModuleReexport
unwrap

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

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