module CabalGild.Type.Extension where
import qualified Data.Char as Char
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
newtype Extension = Extension
{ Extension -> Extension
unwrap :: Extension.Extension
}
deriving (Extension -> Extension -> Bool
(Extension -> Extension -> Bool)
-> (Extension -> Extension -> Bool) -> Eq Extension
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Extension -> Extension -> Bool
== :: Extension -> Extension -> Bool
$c/= :: Extension -> Extension -> Bool
/= :: Extension -> Extension -> Bool
Eq, Int -> Extension -> ShowS
[Extension] -> ShowS
Extension -> String
(Int -> Extension -> ShowS)
-> (Extension -> String)
-> ([Extension] -> ShowS)
-> Show Extension
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Extension -> ShowS
showsPrec :: Int -> Extension -> ShowS
$cshow :: Extension -> String
show :: Extension -> String
$cshowList :: [Extension] -> ShowS
showList :: [Extension] -> ShowS
Show)
instance Ord Extension where
compare :: Extension -> Extension -> Ordering
compare = (Extension -> (Bool, String)) -> Extension -> Extension -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
Ord.comparing ((Extension -> (Bool, String))
-> Extension -> Extension -> Ordering)
-> (Extension -> (Bool, String))
-> Extension
-> Extension
-> Ordering
forall a b. (a -> b) -> a -> b
$ \Extension
e -> (Extension -> Bool
isDisable (Extension -> Bool) -> Extension -> Bool
forall a b. (a -> b) -> a -> b
$ Extension -> Extension
unwrap Extension
e, Extension -> String
forall a. Pretty a => a -> String
Pretty.prettyShow Extension
e)
instance Parsec.Parsec Extension where
parsec :: forall (m :: * -> *). CabalParsing m => m Extension
parsec = Extension -> Extension
Extension (Extension -> Extension) -> m Extension -> m Extension
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m Extension
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
forall (m :: * -> *). CabalParsing m => m Extension
Parsec.parsec
instance Pretty.Pretty Extension where
pretty :: Extension -> Doc
pretty = Extension -> Doc
forall a. Pretty a => a -> Doc
Pretty.pretty (Extension -> Doc) -> (Extension -> Extension) -> Extension -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Extension -> Extension
unwrap
isDisable :: Extension.Extension -> Bool
isDisable :: Extension -> Bool
isDisable Extension
e = case Extension
e of
Extension.EnableExtension KnownExtension
_ -> Bool
False
Extension.DisableExtension KnownExtension
_ -> Bool
True
Extension.UnknownExtension String
s -> case String
s of
Char
'N' : Char
'o' : Char
c : String
_ -> Char -> Bool
Char.isUpper Char
c
String
_ -> Bool
False