module CabalGild.Unstable.Type.Language where

import qualified Data.Ord as Ord
import qualified Distribution.Parsec as Parsec
import qualified Distribution.Pretty as Pretty
import qualified Language.Haskell.Extension as Extension

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

instance Ord Language where
  compare :: Language -> Language -> Ordering
compare = (Language -> String) -> Language -> Language -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
Ord.comparing Language -> String
forall a. Pretty a => a -> String
Pretty.prettyShow

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

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